在Python中将数组作为参数传递

9

我是一名初学Python的人。现在我需要声明一个大小为20的数组并将其传递给一个函数。

期望接收该数组的函数如下:

function(*args)
< p > args 是传递给 function() 的输入参数。

请问有人能帮我,如何在 Python 中传递数组?


你用的是哪种语言?因为这就像 function(array) 一样简单。 - Adib
4
可能是 What does ** (double star) and * (star) do for Python parameters? 的重复问题。 - Łukasz Rogalski
1
请注意,*args 将会解包 args。因此,function 必须至少接受 len(args) 个参数。 - user5547025
1
@DisplayName: 那个函数签名可以处理任意数量的参数,因此要将单个列表/元组/数组传递给它,您可以在函数调用中对其进行解包。请参阅我的答案以获取简单演示。 - PM 2Ring
3个回答

20
当你说“array”时,我假设你指的是Python中的list,因为它在Python中经常用于其他语言中使用数组的情况。Python实际上有几种数组类型:listtuplearray;流行的第三方模块Numpy也提供了一种数组类型。
要将单个列表(或其他类似数组的容器)传递给使用单个*args参数定义的函数,您需要在函数调用中使用*运算符来解压缩列表。
这里是一个在Python 2或Python 3上运行的示例。我已经创建了一个长度为5的列表,以使输出简短。
def function(*args):
    print(args)
    for u in args:
        print(u)

#Create a list of 5 elements
a = list(range(5))
print(a)

function(*a)        

输出

[0, 1, 2, 3, 4]
(0, 1, 2, 3, 4)
0
1
2
3     
4 
请注意,当function打印args时,输出显示为圆括号(),而不是方括号[]。这是因为方括号表示列表,圆括号表示元组。在对function进行调用时,*aa列表解包为单独的参数,但在function定义中的*arg将它们重新打包成元组。
有关*的更多信息,请参见Python教程中的任意参数列表解包参数列表。还可以查看Python参数中的**(双星号)和*(星号)有什么作用?

我应该提到 bytesbytearray 也是数组类型,尽管(如名称所示)它们只能容纳字节值。有关详细信息,请参见 https://docs.python.org/3/library/stdtypes.html#binary-sequence-types-bytes-bytearray-memoryview。 - PM 2Ring

-2

大小并不重要。

只需将list传递给函数即可。

def foo(mylist):
     # do whatever you want with array here
     pass

你不需要使用*args序列解包来实现该目的。


3
我怀疑原帖作者无法更改他们正在调用的函数的签名。 - PM 2Ring

-2

我认为你需要的比预期的要容易:

def arrayIn(arrayFunc):
    print(arrayFunc)

arraySize = 20
mineArray = [None]*arraySize
arrayIn(mineArray)

1
我怀疑原帖作者无法更改他们正在调用的函数的签名。 - PM 2Ring

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接