关于python的全局变量和局部变量、以下描述错误的是_Python:全局变量与局部变量的问题...
在Python中,如果處理不好變量使用的關系,就很容易出現:
UnboundLocalError: local variable 'n' referenced before assignment
這種錯誤。
一般而言,這種錯誤都是這么出現的:
n = 1
def test():
n += 1
print(n)
if __name__ == '__main__':
test()
原因很簡單:在代碼尚未執行時,當某個函數(作用域)內,對某個外部變量進行了處理,而使其值改變,則Python會認為操作的變量是局部變量;在代碼運行時,對于這個Python自己聲明的沒有實際值的局部變量,直接對其進行操作就會出現錯誤。
說的很繞,用例子來說明吧。
這樣是正常情況:
n = 1
def test():
print(n)
if __name__ == '__main__':
test()
因為test()函數中,沒有對n的值進行改變,所以在test()中,n仍然是全局變量n。
但這樣就有問題了:
n = 1
def test():
n += 1
print(n)
if __name__ == '__main__':
test()
錯誤如下:
Traceback (most recent call last):
File "C:\Users\zhantong\Desktop\test.py", line 9, in
test()
File "C:\Users\zhantong\Desktop\test.py", line 5, in test
n += 1
UnboundLocalError: local variable 'n' referenced before assignment
這是因為Python發現了test()函數對n的值進行了改變,所以此時n是局部變量,但n沒有值,自然就出錯了。
有一個細節:
n = 1
def test():
print(n)
n += 1
print(n)
if __name__ == '__main__':
test()
這時出現的錯誤:
Traceback (most recent call last):
File "C:\Users\zhantong\Desktop\test.py", line 10, in
test()
File "C:\Users\zhantong\Desktop\test.py", line 5, in test
print(n)
UnboundLocalError: local variable 'n' referenced before assignment
區別于上面的情況,這時是test()函數中,第一個print()出錯,充分說明Python在test()實際運行前,即已聲明n為局部變量。
解決的辦法很容易,用global聲明,防止Python自行處理:
n = 1
def test():
global n
print(n)
n += 1
print(n)
if __name__ == '__main__':
test()
得到的結果:
1
2
這里還有一點需要注意,list和dict類型并不受上述問題影響
直接用代碼說明吧,list:
l = [1, 2, 3]
def test():
print(l)
l[0] += 1
print(l)
if __name__ == '__main__':
test()
結果:
[1, 2, 3]
[2, 2, 3]
dict也是類似的:
d = {
'a': 1,
'b': 2,
}
def test():
print(d)
d['a'] += 1
print(d)
if __name__ == '__main__':
test()
結果:
{'a': 1, 'b': 2}
{'a': 2, 'b': 2}
綜上,在操作一般變量時,需要考慮全局變量與局部變量的關系,采取的解決方法是傳參或者global聲明;在操作list、dict等對象時,雖然不需要考慮這些問題,但一定要注意可能的不小心修改了其值。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的关于python的全局变量和局部变量、以下描述错误的是_Python:全局变量与局部变量的问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2023中国家电健康趋势高峰论坛在京召开
- 下一篇: python 守护程序检测进程是否存在_