bdh*_*har 2 python parameter-passing
我有一个功能:
def greeter(name, greeting, punc):
print greeting+', '+name+punc
Run Code Online (Sandbox Code Playgroud)
我有一个带参数的字典:
params={'name':'Mark','greeting':'How are you','punc':'?'}
Run Code Online (Sandbox Code Playgroud)
当我调用函数时greeter(**params)
,我得到了预期的输出How are you, Mark?
.但是当我这样打电话时greeter(*params)
,我得到输出name, puncgreeting
.看起来params
已经传递给密钥列表greeter
.这里到底发生了什么?
只是好奇.
看起来像params的密钥列表已经传递给了greeter.这里到底发生了什么?
这确实是正在发生的事情,或多或少.
*x
期望x
是一个可迭代的,并迭代它,逐个将结果解释为参数.默认情况下,迭代dict会遍历其键.(你可以改为使用名称/值对,例如,使用greeter(*(params.items()))
,但是dict仍然是未排序的,因此迭代顺序是不可靠的.)