我对局部变量和全局变量的区别感到困惑。我知道全局变量是在函数外声明的,而局部是在函数中声明的。不过,我想知道,如果它是这样:局部变量和全局变量的区别
def func(l):
a = 0
n = len(l)
w = l[0]
while...
我的问题是,在我写了作为一个例子的功能,我知道,是一个局部变量,但对其他两个是什么?它们也是局部变量吗?
我对局部变量和全局变量的区别感到困惑。我知道全局变量是在函数外声明的,而局部是在函数中声明的。不过,我想知道,如果它是这样:局部变量和全局变量的区别
def func(l):
a = 0
n = len(l)
w = l[0]
while...
我的问题是,在我写了作为一个例子的功能,我知道,是一个局部变量,但对其他两个是什么?它们也是局部变量吗?
所有这些变量都被赋值并自动在本地范围内声明它们。所以它们是局部变量。
即使它们在全球范围内被宣布为外部,它们仍然是本地的。
除非您使用global
关键字,它告诉解释程序当前作用域引用先前声明的全局作用域,或者在全局上下文中创建新作用域(如果没有同名的作用域存在)。
l
是你传递给函数的位置变量,所以是w
因为w
是的l[0]
“复制”有则需要使用变量声明为全局全局变量全球关键字。
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]
还要注意,总是有更好的方式来做某些事情比声明全局变量更好,因为随着代码缩放它会变得更加混乱。
函数中的所有变量都是本地的,只能由该函数使用。全局变量可用于班级中的所有功能。在你的函数
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
我刚好遇到this read它将为您提供有关变量声明和范围很多细节。
[Python Doc局部和全局变量规则]:
In Python, variables that are only referenced inside a function are implicitly global. If a variable is assigned a value anywhere within the function’s body, it’s assumed to be a local unless explicitly declared as global. illustrate this with your example:
用你的例子来说明,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: local variable 'x' referenced before assignment
但是现在如果我们定义x
作为全球那么我们可以随意修改它,因为Python知道任何地方,我们称之为x
是引用相同的v良莠不齐,因此相同的内存地址
x = 5
def func():
global x
x = x + 1
func()
print(x)
它打印出:6通过这个例子,你看到全局变量可以在任何地方在程序中访问的x
希望的值。而局部变量只能在其功能范围内访问。另外,请记住,即使全局变量可以在本地访问,它本身不能本地修改。
是的,它们是局部变量。您将无法在其他地方访问'l'。它只是在你的函数范围内对另一个对象的引用。 –
是的,他们是。当心你对局部和全局变量思想的定义,你可能需要从基础知识开始,并首先在互联网上阅读一些Python基础知识。 –
在函数中添加print(locals())'来检查它。在你的例子中,它应该包含一个,n,w和l。另外,'l'和'w [0]'这两个参考对象都是在函数范围之外创建的。这不**意味着'l'和'w'是全局的。 – Unatiel