文章翻譯自:
在python中,global關鍵字允許你在當前作用域之外修改變數。它用於建立全域性變數,並在區域性上下文中對該變數進行更改。
python中global關鍵字的使用規則如下:
1)當我們在函式中建立變數時,預設情況下它是區域性的。
2)當在函式外部定義變數時,預設情況下它是全域性變數。你不必使用全域性關鍵字。
3)我們使用global關鍵字在函式中讀寫全域性變數。
4)在函式外使用global關鍵字沒有效果。
示例1:從函式內部訪問全域性變數
c = 1 # 根據第二節規則2,此處為global變數
def add():
print(c)
add()
此時輸出
1
但是,在某些情況下,我們可能需要在函式內部修改全域性變數。
示例2:從函式內部修改全域性變數
c = 1 # global variable
def add():
c = c + 2 # increment c by 2
print(c)
add()
當我們執行上述程式時,輸出顯示乙個錯誤:
unboundlocalerror: local variable 'c' referenced before assignment
這是因為我們只能訪問全域性變數,但不能在函式內部修改它。
解決方案是使用global關鍵字
示例3:在函式內部使用global改變全域性變數
c = 0 # global variable
def add():
global c
c = c + 2 # increment by 2
print("inside add():", c)
add()
print("in main:", c)
當我們執行上述程式時,輸出結果將是:
inside add(): 2
in main: 2
在上面的程式中,我們將c定義為add()函式中的全域性關鍵字。
然後,讓變數c增加1,即c = c + 2。之後,我們呼叫add()函式。最後,列印全域性變數c。
正如我們所見,函式外的全域性變數c = 2也發生了變化。
在python中,我們建立乙個單獨的模組config.py來儲存全域性變數,並在同乙個程式中的python模組之間共享資訊。
下面是我們如何在python模組之間共享全域性變數。
示例4:跨python模組共享全域性變數
建立乙個config.py檔案來儲存全域性變數
a = 0
b = "empty"
建立乙個update.py檔案,以更改全域性變數
import config
config.a = 10
config.b = "alphabet"
建立乙個main.py檔案,以測試值的變化
import config
import update
print(config.a)
print(config.b)
當我們執行main.py檔案時,輸出將是
10
alphabet
在上面,我們建立了三個檔案:config.py、update.py和main.py。
config.py模組儲存了a和b的全域性變數。在update.py檔案中,我們匯入config.py模組並修改a和b的值。類似地,在main.py檔案中,我們同時匯入config.py和update.py模組。最後,列印並測試全域性變數的值,不管它們是否被更改。
下面是如何在巢狀函式中使用全域性變數。
示例5:在巢狀函式中使用全域性變數
def foo():
x = 20
def bar():
global x
x = 25
print("before calling bar: ", x)
print("calling bar now")
bar()
print("after calling bar: ", x)
foo()
print("x in main: ", x)
輸出為:
before calling bar: 20
calling bar now
after calling bar: 20
x in main: 25
在上面的程式中,我們在巢狀函式bar()中宣告了乙個全域性變數。在foo()函式中,x不受全域性關鍵字的影響。
在呼叫bar()前後,變數x取區域性變數的值,即x = 20。在foo()函式之外,變數x取bar()函式中定義的值,即x = 25。這是因為我們在x中使用了global關鍵字在bar()函式(區域性作用域)中建立了全域性變數。
如果我們在bar()函式內部做了任何更改,這些更改會出現在區域性作用域之外,例如foo()。
問題1:下面**為什麼res可以正常使用,tmp報錯
class solution:
def combinationsum(self, candidates: list[int], target: int) -> list[list[int]]:
n = len(candidates)
candidates.sort()
res, tmp = ,
def dfs(pos,need):
if need == 0:
return
if need < 0:
return
for i in range(pos, n):
val = candidates[i]
tmp += [val]
dfs(i, need-val)
tmp.pop()
dfs(0, target)
return res
報錯:
file "c:/users/smartdsp-lyl/pycharmprojects/pythonproject/main.py", line 28, in dfs
tmp += [val]
unboundlocalerror: local variable 'tmp' referenced before assignment
因為:根據示例二,我們只能訪問外部的全域性變數,而無法進行更改。
最後ps,
原作鏈結在這裡:
其實我不知道怎麼讓作者允許我翻譯。。。
python global全域性變數
在函式的內部如果想使用函式外的變數,並且希望改變該變數的值,可以考慮使用global關鍵字,從而告訴直譯器該變數在函式體外部定義,當前函式可以對其進行改變。下面請看加global語句和不加global語句使用變數的差別。usr bin python deffunc x print x is x x ...
Python Global和Nonlocal的用法
nonlocal和global也很容易混淆。簡單記錄下自己的理解。總之一句話,作用域是全域性的,就是會修改這個變數對應位址的值。global語句是乙個宣告,它適用於整個當前 塊。這意味著列出的識別符號將被解釋為全域性變數。儘管自由變數可能指的是全域性變數而不被宣告為全域性變數。global語句中列出...
python global和nonlocal的使用
變數定義在函式外部的時候,如果函式裡面想改變這個全域性變數的值,需要在當前的引用函式裡面重新定義乙個變數 並用關鍵字global修飾。例如 a 1 def b a 1 print a b 用ide寫完這段 的時候,還沒執行就會報紅線提示錯誤,執行之後產生錯誤,錯誤內容為 unboundlocaler...