Python3 - 使用函数参数作为变量的名称

时间:2016-12-19 10:46:14

标签: python list python-3.x

我有一个创建不同形式的数组的函数,我不知道如何区分它们。有类似的可能吗?

def array_creator(nameArray):
    nameArray = [0,1,2]

array_creator(a)
print(a)  # prints [0,1,2]

目前我总是运行该函数,然后手动分配变量来存储数组。 谢谢!

3 个答案:

答案 0 :(得分:1)

要使您的示例正常工作,您需要在使用它之前定义变量 0100 0111 .... .... .... .... .... .... = (0x00000047) tsh->s_byte .... .... 0... .... .... .... .... .... = 0 tsh->t_e_indicator .... .... .0.. .... .... .... .... .... = 0 tsh->p_u_s_indicator .... .... ..0. .... .... .... .... .... = 0 tsh->t_priority .... .... ...0 0100 1001 0011 .... .... = (0x00000493) tsh->id .... .... .... .... .... .... 00.. .... = (0x00000000) tsh->t_s_control .... .... .... .... .... .... ..01 .... = (0x00000001) tsh->a_f_control .... .... .... .... .... .... .... 0010 = 2 tsh->c_counter。例如。 a。但是,您的示例将无法按您希望的方式工作。这样做的原因是您在第2行的a = []变量中分配了一个新对象([1, 2, 3])。这样您就失去了对象nameArray的引用。但是,可以从函数内部更改对象a

a

这会奏效。有关详细信息,请查看How to write functions with output parameters

答案 1 :(得分:1)

在Python中,您可以通过从函数返回一个值并将此值绑定到本地名称来实现此目的,即:

def array_creator():
    return [0, 1, 2]

a = array_creator()

答案 2 :(得分:0)

Python没有“输出参数”,因此普通赋值只会更改局部变量的绑定,但不会修改任何值,也不会更改函数外部变量的绑定。 / p>

但是list是可变的,所以如果你想修改参数,只需这样做:

nameArray[:] = [0,1,2]

这会将nameArray的内容替换为0,1,2(如果nameArraylist,则有效。)

另一种方法是让你的函数只返回你想要赋值的值:

def array_creator():
    values = [0, 1, 2]
    return values

my_arr = array_creator()

最后,如果函数想要修改global / nonlocal变量,则必须将其声明为:

a = [1,2,3]

def array_creator():
    global a
    a = [0,1,2]

print(a)   # [1,2,3]
array_creator()
print(a)   # [0,1,2]

或者:

def wrapper():
    a = [1,2,3]
    def array_creator():
        nonlocal a
        a = [0,1,2]
    return a, array_creator

a, creator = wrapper()

print(a)   # [1,2,3]
creator()
print(a)   # [0,1,2]

但请注意,以这种方式使用全局变量通常是不良做法,因此请尽量避免使用。