Python 将全局定义的列表更改为本地
我有一个关于python变量的问题。正如您在下面看到的,我用L定义了一个列表 然后使用I一个整数变量,我将新的数字作为局部添加到函数内部的列表中。我可以将函数外部的更改列表作为全局使用;另一方面,整型变量的情况不同。 有人能帮我吗?有什么区别? PS:我知道,我在函数中使用整数变量作为局部变量,因为它在全局上不会改变。但是为什么不是一个列表变量呢Python 将全局定义的列表更改为本地,python,global-variables,Python,Global Variables,我有一个关于python变量的问题。正如您在下面看到的,我用L定义了一个列表 然后使用I一个整数变量,我将新的数字作为局部添加到函数内部的列表中。我可以将函数外部的更改列表作为全局使用;另一方面,整型变量的情况不同。 有人能帮我吗?有什么区别? PS:我知道,我在函数中使用整数变量作为局部变量,因为它在全局上不会改变。但是为什么不是一个列表变量呢 L=[] I=5 def change_var(I,L): I=10 L.append(12) print('Inside
L=[]
I=5
def change_var(I,L):
I=10
L.append(12)
print('Inside function I',I)
print('Inside function L',L)
return I,L
change_var(I,L)
print('Outside function I',I)
print('Outside function L',L)
结果
>>>Inside function I 10
>>>Inside function L [12]
>>>Outside function I 5
>>>Outside function L [12]```
如果变量受到函数体中任意位置的值的影响(如
variable=…
),则该变量被视为局部变量,除非在此函数中明确声明它为global
您对待I
和L
的方式非常不同:
- 您在
中为I=10
赋值,因此它被视为局部变量,因此与另一个全局I
变量不同。您对它所做的更改无法反映在另一个全局I
上。如果要对全局I
执行操作,应在函数开始时声明I
global I
- 您不需要为
分配任何内容,只需修改唯一的、已经存在的全局列表L
I
和L
创建新变量。在我的示例中,我将它们改为小写(I
和l
)。此外,当您将数字/变量放在函数括号内时,它会将函数内的变量设置为该数字/变量,而不是将该数字放在变量内。因此,当您放置change\u var(I,L)
时,它可以有效地运行函数,但将行I=I
和L=L
放在开始处,而不是将所有I
s替换为I
s。要解决此问题,您必须在函数内部将I
设置为全局,这样它会影响函数外部的代码,然后使I
等于I
。
完整的代码是
L=[]
I=5
def change_var(i,l):
i=10
l.append(12)
print('Inside function I',i)
print('Inside function L',l)
global I
I=i
return i,l
change_var(I,L)
print('Outside function I',I)
print('Outside function L',L)
代码应该可以工作,但如果我的解释没有任何意义,我很抱歉-我对回答堆栈溢出问题还是很陌生。谢谢您的回答,如果我正确理解您的意思,列表不能分配给变量?当然可以。有关Python如何工作的更多详细信息,请参见“优秀”部分。谢谢,我在第一种情况下得到了正确的结果,我使用L.append(12)添加了新的数字,从而对列表进行了修改,但是如果我在函数中指定了新的列表,如L=[12],列表也将表现为局部变量!