Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将全局定义的列表更改为本地_Python_Global Variables - Fatal编程技术网

Python 将全局定义的列表更改为本地

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

我有一个关于python变量的问题。正如您在下面看到的,我用L定义了一个列表 然后使用I一个整数变量,我将新的数字作为局部添加到函数内部的列表中。我可以将函数外部的更改列表作为全局使用;另一方面,整型变量的情况不同。 有人能帮我吗?有什么区别? PS:我知道,我在函数中使用整数变量作为局部变量,因为它在全局上不会改变。但是为什么不是一个列表变量呢

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],列表也将表现为局部变量!