【问题标题】:Behavior of buggy parameter passing错误参数传递的行为
【发布时间】:2011-07-08 08:49:54
【问题描述】:

我有一个函数:

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

只是好奇。

【问题讨论】:

    标签: python parameter-passing


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      就像遍历字典会产生键一样,以这种方式在位置扩展中使用它也是如此。

      print list(params)
      

      【讨论】:

        猜你喜欢
        • 2014-12-18
        • 1970-01-01
        • 2015-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多