![](/img/trans.png)
[英]Getting error in python when trying to print a variable from a class' function
[英]Getting error when I try to print a global variable in a function in Python3
在這個簡單的代碼中學習關於全局變量和局部變量的區別:
def sub():
print(a)
a="banana"
print(a)
a="apple"
sub()
print(a)
我收到一個錯誤:
UnboundLocalError
Traceback(最近一次通話最后一次)在
5
6 a="蘋果"
----> 7 個子()
8 打印(一)在子()
1個定義子():
----> 2 打印(一)
3 a="香蕉"
4 打印(一)
5UnboundLocalError:分配前引用的局部變量“a”
我目前了解'a'是一個全局變量,它在 function之外聲明。
(它沒有像 C 中的 main() 一樣在任何 function 上聲明)
但是為什么這個錯誤告訴我'a'是一個局部變量?
我知道如果我在print(a)
行上方添加global a
將解決這個錯誤,但我想知道為什么。
Python 將這一行: function 中a="banana"
解釋為新的局部變量a
的定義。 function 的 scope 中的這個變量替換了全局變量a
。 請注意, print(a)
(對局部變量a
引用)出現在a="banana"
(= 賦值)之前。 因此你得到錯誤: UnboundLocalError: local variable 'a' referenced before assignment
。
也可以看看:
當變量有值時,為什么我會收到 UnboundLocalError?
Python 陷阱
Python 開發人員最常犯的 10 個錯誤
主要原因是通過放置
打印(一)
在 function 內部將變量“a”設置為該 function 的局部變量(即局部范圍)。 忽略
一個=“蘋果”
在 function 之外定義。
由於 'a' 值尚未在 'sub' function 內部初始化,因此在執行 print(a) 時找不到它的值,因此顯示在賦值之前引用的局部變量 'a' 這正是在上述情況下發生的情況。
總結
def sub():
# print(a) #Just comment this and you will understand the difference
## By doing print(a) inside sub function makes sets 'a' as local variable
## whose value has not been initialized
## and as its value couldn't be found while line print(a) executes hence shows
## local variable 'a' referenced before assignment which is exactly what
## happens
a="banana" # a is assigned here
print(a)
a="apple"
sub()
print(a)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.