越野车参数传递的行为

时间:2011-07-08 08:49:54

标签: python parameter-passing

我有一个功能:

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。这里到底发生了什么?

好奇。

2 个答案:

答案 0 :(得分:5)

  

看起来params的密钥列表已经传递给了greeter。这里到底发生了什么?

这确实是正在发生的事情,或多或少。

*x期望x是可迭代的,并对其进行迭代,将结果逐个解释为参数。默认情况下,迭代dict会遍历其键。 (例如,您可以使用greeter(*(params.items()))来获取名称/值对,但是dict仍然是未排序的,因此迭代顺序将不可靠。)

答案 1 :(得分:2)

就像在dict上迭代产生键一样,在这种方式中使用它也是如此。

print list(params)