我對局部變量和全局變量的區別感到困惑。我知道全局變量是在函數外聲明的,而局部是在函數中聲明的。不過,我想知道,如果它是這樣:局部變量和全局變量的區別
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