局部变量和全局变量之间的区别



我对局部变量和全局变量之间的区别感到困惑。我知道全局变量是在函数外部声明的,而局部变量是在函数中声明的。但是,我想知道是否是这样:

def func(l):
a = 0
n = len(l)
w = l[0]
while...

我的问题是,在我作为示例编写的函数中,我知道 a 是局部变量,但其他两个呢? 它们也是局部变量吗?

l是您传递给函数的位置变量,因此wwl[0]的"副本">

要获得全局变量,您需要使用 global 关键字将该变量声明为全局变量。

x = 1
y = 2
def func(l):
global x 
x = 4 
l = 5
print("x is {0}, y is {1}".format(x,l))
func(y)
print("x is {0}, y is {1}".format(x,y))

返回:

x is 4, y is 5
x is 4, y is 2

请注意x现在如何更改,但y没有?

请注意,lists是特殊的,因为您无需声明global关键字即可追加或删除它们:

x = []
def func():
x.append(3)
print("x is {0}".format(x))
func()
print("x is {0}".format(x))

返回:

x is [3]
x is [3]

但是对列表的引用不是全局的,因为它们是它的"副本":

x = [3]
y = 1
def func():
y = x[0]
print("y is {0}".format(y))
func()
print("y is {0}".format(y))

返回:

y is 3
y is 1

此外,重新分配作为列表的变量不是全局的:

x = [3]
def func():
x = [2]
print("x is {0}".format(x))
func()
print("x is {0}".format(x))

返回:

x is [2]
x is [3]

另请注意,总有比声明全局变量更好的方法来做某事,因为随着代码的扩展,它会变得更加混乱。

所有这些变量都被分配了值,并在本地范围内自动声明它们。所以它们是局部变量。

即使它们在全球范围之外被宣布,它们仍然是本地的。

除非您使用global关键字,该关键字告诉解释器当前范围引用先前声明的全局,或者如果不存在具有相同名称的全局,则在全局上下文中创建一个新范围。

def func(l):
global n # n is declared in the global scope
a = 0
n = len(l)
w = l[0]
while...
func()
print(n)

函数中的所有变量都是局部变量,只能由该函数使用。 全局变量可由类中的所有函数使用。在您的函数中

def func(l):
a = 0
n = len(l)
w = l[0]
while...
>>>a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

a、n、w 和 l 在func范围之外不可用。 如果你做了这样的事情...

a = 0 
def func(l):
n = len(l)
w = l[0]
while...
>>>a
0

我只是碰巧遇到了这个阅读,它为您提供了很多关于变量声明和范围的详细信息。

[Python Doc the Rule for Local and Global variables]:

在 Python 中,仅在函数内引用的变量是 隐式全局。如果变量在 函数的主体,除非明确,否则假定它是本地的 声明为全局。用你的例子来说明这一点:

使用您的示例来说明,在func内声明的所有变量都是局部变量。 甚至在函数外部声明的值。 像变量一样x它没有父函数,但它实际上仍然不是全局变量。x只是在调用func之前提交到内存

x = 5 #actually local
def func(l):
a = 0
n = len(l)
w = l[0]
print(x)  # x is local we call call it, use it to iterate but thats is pretty much it

如果我们尝试修改局部变量x,你会得到一个错误:

x = 5
def func(l):
a = 0
n = len(l)
w = l[0]
x = x + 1 # can't do this because we are referning a variable before the funtion scope. and `x` is not global

UnboundLocalError:赋值前引用的局部变量"x">

但是现在,如果我们x定义为全局的,那么我们可以自由地修改它,因为当我们调用x引用同一变量并因此具有相同的内存地址时,Python 知道任何地方

x = 5
def func():
global x
x = x + 1
func()    
print(x)

它打印出:6 作为x的值

希望通过这个例子,你可以看到全局变量可以在程序的任何地方访问。而局部变量只能在其函数范围内访问。另外,请记住,即使全局变量可以在本地访问,也不能在本地进行修改。

局部变量 :当我们在函数内声明一个变量时,它就变成了一个局部变量。 全局变量:当我们在函数外声明一个变量时,它就变成了一个全局变量。

Python 程序了解局部变量与全局变量的差异

#same name for local and global variable.
a = 1         #this is global variable
def my_function():
a = 2     #this is local variable 
print("a= ", a)    #display local var
my_function()
print("a = ", a)      #display global var.

此程序访问全局变量

a = 1  #This is global var
def my_function():
global a #This is global var. 
print("global a= ", a)  #display new value
a = 2   #modify global var value
print("modify a = ", a) #display a new value
my_function()
print("global a= ", a)  #display modified value

最新更新