62

我一直在研究将数组或列表(因为 Python 倾向于调用它们)传递给函数。

我读过一些关于使用 *args 的内容,例如:

def someFunc(*args)
    for x in args
        print x

但不确定这是对还是错。似乎没有什么可以按我的意愿工作。我曾经能够轻松地将数组传递给 PHP 函数,这让我很困惑。看来我也不能这样做:

def someFunc(*args, someString)

因为它抛出了一个错误。

我想我刚刚把自己完全弄糊涂了,想找人帮我解决。

4

5 回答 5

82

当您使用此语法定义函数时:

def someFunc(*args):
    for x in args
        print x

您是在告诉它您期望可变数量的参数。如果你想传入一个列表(来自其他语言的数组),你可以这样做:

def someFunc(myList = [], *args):
    for x in myList:
        print x

然后你可以用这个来调用它:

items = [1,2,3,4,5]

someFunc(items)

您需要在变量参数之前定义命名参数,在关键字参数之前定义变量参数。你也可以这样:

def someFunc(arg1, arg2, arg3, *args, **kwargs):
    for x in args
        print x

它至少需要三个参数,并支持可变数量的其他参数和关键字参数。

于 2010-10-18T16:13:40.693 回答
32

您可以像其他类型一样传递列表:

l = [1,2,3]

def stuff(a):
   for x in a:
      print a


stuff(l)

这将打印列表 l。请记住,列表是作为引用而不是作为深层副本传递的。

于 2010-10-18T16:12:43.693 回答
8

您不需要使用星号来接受列表。

只需在定义中给参数一个名称,然后传入一个列表,如

def takes_list(a_list):
    for item in a_list:
         print item
于 2010-10-18T16:13:20.790 回答
8

Python 列表(不仅仅是数组,因为它们的大小可以随时更改)是普通的 Python 对象,可以作为任何变量传递给函数。* 语法用于解包列表,这可能不是您现在想要做的事情。

于 2010-10-18T16:14:18.173 回答
1
def sumlist(items=[]):
    sum = 0
    for i in items:
        sum += i

    return sum

t=sumlist([2,4,8,1])
print(t)
于 2020-08-20T18:31:24.993 回答