我有一个功能:
def greeter(name, greeting, punc):
print greeting+', '+name+punc
我有一个带参数的字典:
params={'name':'Mark','greeting':'How are you','punc':'?'}
当我将函数调用为greeter(**params)
时,我得到预期的输出How are you, Mark?
。但是,当我这样调用greeter(*params)
时,我得到输出name, puncgreeting
。看起来params
的密钥列表已传递给greeter
。这里到底发生了什么?
好奇。
答案 0 :(得分:5)
看起来params的密钥列表已经传递给了greeter。这里到底发生了什么?
这确实是正在发生的事情,或多或少。
*x
期望x
是可迭代的,并对其进行迭代,将结果逐个解释为参数。默认情况下,迭代dict会遍历其键。 (例如,您可以使用greeter(*(params.items()))
来获取名称/值对,但是dict仍然是未排序的,因此迭代顺序将不可靠。)
答案 1 :(得分:2)
就像在dict上迭代产生键一样,在这种方式中使用它也是如此。
print list(params)