2010-10-18 79 views
30

我一直在寻找传递数组或列表,因为Python倾向于将它们称为函数。传递数组/列表到Python

我读一些有关使用*指定参数时,如:

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

但不知道这是否是正确/错误。没有什么似乎符合我的要求。我习惯于能够轻松地将数组传递给PHP函数,这让我感到困惑。它也似乎我不能做到这一点:由于它抛出了一个错误

def someFunc(*args, someString) 

我想我已经让自己完全困惑,并寻找某人为我清除它。

+1

http://docs.python.org/tutorial/controlflow.html#arbitrary-argument-lists简要说明使用星号的详细信息。这意味着你可以传递任意数量的参数,并且它们将被封装在一个元组中(可以像函数中的列表那样访问)。带星号的参数名称必须最后一次,以便Python知道哪个是哪个名称。 – JAL 2010-10-18 16:18:20

+0

“正如Python倾向于称之为”?这不是一种“倾向”。这是一个定义问题。 – 2010-10-18 17:48:54

+5

S.洛特冷静下来!我认为你在那里有点苛刻 - 有没有评论在谈话中增加了什么?没有。 – 2010-10-18 18:49:17

回答

41

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

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 

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

+8

小心使用可变对象作为默认参数! def someFunc(myList = []): myList.append(1) someFunc在没有参数的情况下调用两次将返回[1,1],因为默认参数只在构造函数定义时被构造一次。 – 2010-10-18 16:16:13

13

您可以通过列表就像其他类型:

l = [1,2,3] 

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


stuff(l) 

这将打印列表L。请记住,列表不会作为深层副本传递。

+1

@ S.Lott:是的。我的意思是深刻的复制......感谢你的支持。 – JoshD 2010-10-18 20:28:23

4

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

时,只需提供参数名称的定义,并以列表传似

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

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