簡體   English   中英

當我嘗試在 Python3 中的 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 打印(一)
5

UnboundLocalError:分配前引用的局部變量“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM