Python: how key is passed into the function with default value of None [closed]

一个人想着一个人 提交于 2020-01-07 04:21:25

问题


I'm confused in this code, the allmax passes hand_rank function as the key, but in the definition of allmax, it sets the key to be None, then how the hand_rank passed to this allmax function?

def poker(hands):
    "Return a list of winning hands: poker([hand,...]) => [hand,...]"         
    return allmax(hands, key=hand_rank)


def allmax(iterable, key=None):
    "Return a list of all items equal to the max of the itterable."
    result, maxval = [],None
    key = key or (lambda x:x)
    for x in iterable:
        xval = key(x)
        if not result or xval > maxval:
            result,maxval = [x],xval
        elif xval == maxval:
            result.append(x)
    return result

回答1:


That's a default parameter. key would only default to None, if hand_rank was never passed, or was passed empty. You can set a default parameter to be pretty much anything,

def allmax(iterable, key=[])

However in this case, it looks like you want to avoid updating an empty list. If key was set to [ ], it would add to the list on later calls, rather than start with a fresh list.

Here's a good explanation of mutable default parameters, and why None is used to stop unexpected behaviour. And here is someone else on Stack Overflow having the empty list parameter problem.




回答2:


Default value for parameter in the function definition is used only if that function is called without that parameter.

Very simple example for understanding it:

The definition:

def print_it( message = "Hello!" ):
    print( message)

Calling it without a parameter:

print_it();                          # The default value will be used

gives the output

Hello!

Calling it with a parameter

print_it( "Give me your money!" )    # The provided value will be used

gives the output

"Give me your money!"

The default value is in this case totally ignored.



来源:https://stackoverflow.com/questions/44333937/python-how-key-is-passed-into-the-function-with-default-value-of-none

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!