【问题标题】:Passing several arguments from an array to a function in a easy way以简单的方式将多个参数从数组传递给函数
【发布时间】:2015-08-19 17:38:07
【问题描述】:

好吧,我真的不知道如何用语言来描述这一点,但我有一个简单的例子:

def foo(x,y,z):
     r=x+....

a = [1,2,3]
foo(a[0], a[1], a[2])

我可以在不多次调用a[n] 的情况下做同样的事情吗?但保留“x,y,z”的定义?

【问题讨论】:

    标签: python arrays list function arguments


    【解决方案1】:

    使用unpacking operator

    >>> def foo(x,y,z):
    ...     return x+y+z
    ... 
    >>> a = [1,2,3]
    >>> foo(*a)
    6
    

    来自文档

    如果它们不能单独使用,请在函数调用中使用 *-operator 从列表或元组中解压缩参数:

    >>> args = [3, 6]
    >>> range(*args)            # call with arguments unpacked from a list [3, 4, 5]
    

    【讨论】:

    • @Pablo 是的。请参阅文档。你在尝试什么?之后你不能传递任何其他未命名的参数。
    • 我在互联网上找到了答案(这就是为什么删除了我的评论),我正在做一些 opengl 的东西,而且参数是无限的;/ 所以我正在做我自己的函数,有些需要 9 个参数(来自 3 个不同的向量),所以我想做“myRotate(*vectora, *vectorb, *vectorc, angle)
    • @Pablo 哎呀。然后你需要将它们全部添加到一个元组中,否则你将不得不创建一个 feeder 函数
    • 这可能是一个愚蠢的问题,但是这是否更快,更python kosher然后说将列表作为函数参数传递,例如 foo(a) where a = [1,2,3]跨度>
    • @IntrepidTraveller 是的。这实际上是最好的方法。但是我还没有看到它的内部结构。一旦我看到我会回复你:)
    【解决方案2】:

    是的,使用解包运算符将任意参数传递给您的函数:

    def foo(*args):
         for i in args : # you can iterate over args or get its elements by indexing
             #do stuff
    
    a = [1,2,3]
    foo(*a)
    

    如果你只传递 3 个参数,你可以在调用时使用解包。

    def foo(x,y,z):
         r=x+....
    
    a = [1,2,3]
    foo(*a)
    

    【讨论】:

    • 该死的我们同时回答了 ;)
    【解决方案3】:

    试试这个

    def foo(x,y,z):
         r=x+....
    
    a = [1,2,3]
    foo(*a)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-17
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      相关资源
      最近更新 更多