Python:如何在函数中访问数组参数的元素?

时间:2019-03-04 13:26:05

标签: python

考虑以下最小示例:

def arfunc(x,*a):
    sa=a[1]
    return sa

b=arfunc(1.,(5.,2.))
print(b)

我需要传递一个数组,数组的长度可能随函数而异,然后使用该函数中的单个数组元素。如果我在函数中用a[1]交换了a[0],则返回整个列表。为什么这不起作用,我如何使其起作用?

5 个答案:

答案 0 :(得分:3)

带有可变参数(def checkNeighbours(i,j): alive_nodes=0 if(labels[i+1][j].getColor()=="black"): alive_nodes+=1 if(labels[i][j+1].getColor()=="black"): alive_nodes+=1 if(labels[i-1][j].getColor()=="black"): alive_nodes+=1 if(labels[i][j-1].getColor()=="black"): alive_nodes+=1 if(labels[i+1][j+1].getColor()=="black"): alive_nodes+=1 if(labels[i-1][j-1].getColor()=="black"): alive_nodes+=1 if(labels[i+1][j-1].getColor()=="black"): alive_nodes+=1 if(labels[i-1][j+1].getColor()=="black"): alive_nodes+=1 return alive_nodes )的函数希望它们作为多个参数:

*args

如果要像以前一样使用该功能,请删除星号:

b=arfunc(1., 5., 2.)
print(b)

答案 1 :(得分:1)

函数定义中的

* 符号允许函数具有可变参数类型。变量 a 将成为在第一个变量 x 之后传递的所有位置参数的集合。

不需要使用 * 符号来使 a 具有可变长度。列表在Python中已经具有该属性。

答案 2 :(得分:1)

您错过了一件事情,那就是如果我们必须将可变长度参数(在python中称为Arbitrary Arguments)传递给函数,则需要添加*(星号)

def arfunc(x,*a):   # here *a can hold argument that may vary in numbers.
    sa=a[1]
    return sa

b=arfunc(1.,*(5.,2.)) # here you also have to provide a arbitary arguments like this.
print(b)

为更好地理解,请参考以下书面代码:

def arfunc(x,*a):
    sa=a[1]
    return sa

d = 1.
e = (5.,2.)

b=arfunc(d,*e)
print(b)

答案 3 :(得分:0)

您可以传递列表或列表列表。

例如

列表-

 [1,2,3,4]

列表列表-

[1,2,3[4,5,6]]

如果那是您要尝试做的事情。

答案 4 :(得分:0)

星号“ *”用于从列表中解压缩参数。当函数需要随机数的参数时,它类似于C / C ++或Java中的varargs。在这种情况下,您无法更改原始列表/数组。

但是,如果需要传递一个数组,则将在函数内部进行更改,然后将其返回,建议您在不带解包运算符*的情况下传递和传递数组或列表。示例:

def try_to_change_list_contents(the_list):
   print('got', the_list)
   the_list.append('four')
   print('changed to', the_list)

outer_list = ['one', 'two', 'three']

print('before, outer_list =', outer_list)
try_to_change_list_contents(outer_list)
print('after, outer_list =', outer_list)

您也可以看一下这篇文章: topic