将数组/列表传递到Python函数中
我一直在研究如何将数组或列表(Python通常会调用它们)传递到函数中 我读了一些关于使用*args的内容,例如:将数组/列表传递到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) 因为它抛出了一个错误 我想我已经完全弄糊涂了,正在找人帮我把它弄清楚。你可
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)