【问题标题】:Is there a more pythonic way of exploding a list over a function's arguments?有没有一种更 Pythonic 的方式来在函数的参数上展开列表?
【发布时间】:2012-12-03 05:09:19
【问题描述】:
def foo(a, b, c):
 print a+b+c

i = [1,2,3]

有没有在 i 上不显式索引的情况下调用 foo(i) 的方法? 尽量避免 foo(i[0], i[1], i[2])

【问题讨论】:

  • 函数定义中多次使用,调用的时候为什么不使用...谢谢各位python大佬还原。

标签: python list function parameters arguments


【解决方案1】:

是的,使用foo(*i)

>>> foo(*i)
6

你也可以在函数定义中使用*def foo(*vargs) 将所有非关键字参数放入一个名为 vargs 的元组中。 并且使用**,例如def foo(**kargs),会将所有关键字参数放入一个名为kargs的字典中:

>>> def foo(*vargs, **kargs):
        print vargs
        print kargs

>>> foo(1, 2, 3, a="A", b="B")
(1, 2, 3)
{'a': 'A', 'b': 'B'}

【讨论】:

    【解决方案2】:

    它被称为argument unpacking,它有一个运算符。

    foo(*i)
    

    顺便说一句,它适用于任何可迭代对象,而不仅仅是列表。

    【讨论】:

    • +1 用于删除游戏名称。实际上,这有助于谷歌搜索任何语言的东西。非常感谢。
    【解决方案3】:

    是的,Python 支持:

    foo(*i)
    

    请参阅Unpacking Argument Lists 上的文档。适用于任何可迭代的东西。有两颗星 ** 它适用于字典和命名参数。

    def bar(a, b, c): 
        return a * b * c
    j = {'a': 5, 'b': 3, 'c': 2}
    
    bar(**j)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-22
      • 2021-03-05
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2010-12-08
      相关资源
      最近更新 更多