Python Global全域性變數關鍵字

2021-10-25 22:36:55 字數 3577 閱讀 1028

文章翻譯自:

在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...