将数组/列表传递到Python函数中

将数组/列表传递到Python函数中,python,parameter-passing,argument-unpacking,Python,Parameter Passing,Argument Unpacking,我一直在研究如何将数组或列表(Python通常会调用它们)传递到函数中 我读了一些关于使用*args的内容,例如: def someFunc(*args) for x in args print x 但不确定这是对还是错。似乎没有什么能像我想要的那样工作。我习惯于能够轻松地将数组传递到PHP函数中,这让我感到困惑。看来我也做不到: def someFunc(*args, someString) 因为它抛出了一个错误 我想我已经完全弄糊涂了,正在找人帮我把它弄清楚。你可

我一直在研究如何将数组或列表(Python通常会调用它们)传递到函数中

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

def someFunc(*args)
    for x in args
        print x
但不确定这是对还是错。似乎没有什么能像我想要的那样工作。我习惯于能够轻松地将数组传递到PHP函数中,这让我感到困惑。看来我也做不到:

def someFunc(*args, someString)
因为它抛出了一个错误


我想我已经完全弄糊涂了,正在找人帮我把它弄清楚。

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

l = [1,2,3]

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


stuff(l)

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

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

只需在定义中为参数指定一个名称,然后像

def takes_list(a_list):
    for item in a_list:
         print item

使用以下语法定义函数时:

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

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

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

小心使用可变对象作为默认参数
def someFunc(myList=[]):myList.append(1)
someFunc在没有参数的情况下调用两次将返回[1,1],因为在计算函数定义时,默认参数只构造一次。@Rafal Rawicki我不清楚仅构造一次的
myList
,如何影响调用之间存储的内容。在每次调用开始时,
myList
应该是空的,但事实并非如此,正如您所指出的那样。这是因为
myList
不是
someFunc
的本地范围吗?
*args
在您的第二个示例中,
def someFunc(myList=[],*args):
,较简单的
def someFunc(myList=[]):
不做什么?谢谢编辑:哦,等等,这意味着您可以将
myList
作为列表或元组传递。两种方法都有效。对吗?@PatrickT-没有。这意味着该函数接受
myList
参数(并提供默认值),而且它还接受大量的附加参数(示例中未使用这些参数)。@PatrickT-是的,但您在术语方面混淆了一些内容,这可能会导致以后的混淆。当您编写
someFunc(1,2)
时,您不是在“传递元组”,而是在“使用两个参数调用函数”。要真正传递元组,您需要编写
someFunc((1,2))
。注意,这将把元组值
(1,2)
放在
myList
中,额外的参数仍然是空的。您可以编写
someFunc((1,2),3)
,在这种情况下,您可以“传递元组”和“提供附加参数”。简要介绍使用星号的详细信息。这意味着您可以传递任意数量的参数,它们将被封装在元组中(可以像函数中的列表一样访问元组)。带星号的参数名必须排在最后,以便Python知道哪个是哪个。“因为Python倾向于调用它们”?这不是一种“趋势”。这是一个定义的问题。洛特,冷静!我觉得你有点苛刻——那句话有没有给谈话增添什么内容?不,你可以认为这很严厉。然而,单词的选择非常重要,因为其他知识较少的人会读到这篇文章。我的意思是“倾向于称呼他们”是一个糟糕的词语选择,因为它会让人困惑。用“数组”代替“列表”的Python问题已经足够多了。这表明人们没有使用正确的术语,也没有成功地搜索现有文档。混乱已经够多了。这是一张“名单”。真正地你也可以用这个词,不用担心矛盾。最有趣的是。。。虽然我很欣赏S.Lott对单词的关注,但Python列表实际上是作为动态数组实现的。。。英雄联盟
def sumlist(items=[]):
    sum = 0
    for i in items:
        sum += i

    return sum

t=sumlist([2,4,8,1])
print(t)