越野车参数传递的行为

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

只是好奇.

Kar*_*tel 5

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

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

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