将数组/列表传递给Python

Jac*_*lin 42 python parameter-passing argument-unpacking

我一直在寻找将Python倾向于调用它们的数组或列表传递给函数.

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

def someFunc(*args)
    for x in args
        print x
Run Code Online (Sandbox Code Playgroud)

但不确定这是对还是错.似乎没有什么能像我想的那样工作.我习惯于能够轻松地将数组传递给PHP函数,这让我感到困惑.我似乎也做不到这个:

def someFunc(*args, someString)
Run Code Online (Sandbox Code Playgroud)

因为它引发了一个错误.

我想我只是让自己完全糊涂了,并且正在找人为我清理它.

g.d*_*d.c 56

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

def someFunc(*args)
    for x in args
        print x
Run Code Online (Sandbox Code Playgroud)

你告诉它你期望有不同数量的参数.如果你想传入一个List(来自其他语言的数组)你会做这样的事情:

def someFunc(myList = [], *args)
    for x in myList:
        print x
Run Code Online (Sandbox Code Playgroud)

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

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

someFunc(items)
Run Code Online (Sandbox Code Playgroud)

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

def someFunc(arg1, arg2, arg3, *args, **kwargs)
    for x in args
        print x
Run Code Online (Sandbox Code Playgroud)

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

  • 谨防使用可变对象作为默认参数!<code> def someFunc(myList = []):myList.append(1)</ code> someFunc在没有参数的情况下调用两次将返回[1,1],因为默认参数只构造一次,当评估函数定义时. (10认同)

Jos*_*shD 25

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

l = [1,2,3]

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


stuff(l)
Run Code Online (Sandbox Code Playgroud)

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

  • @ S.Lott:是的。我的意思是深复制...感谢您抓住这一点。 (2认同)

Gin*_*kas 8

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


JAL*_*JAL 6

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

只需在定义中为参数指定一个名称,然后传入一个类似的列表

def takes_list(a_list):
    for item in a_list:
         print item
Run Code Online (Sandbox Code Playgroud)