Python 基礎(chǔ)教程

Python 流程控制

Python 函數(shù)

Python 數(shù)據(jù)類型

Python 文件操作

Python 對(duì)象和類

Python 日期和時(shí)間

Python 高級(jí)知識(shí)

Python 參考手冊(cè)

Python Global 關(guān)鍵字

在閱讀本文之前,請(qǐng)確保您已掌握Python全局,局部和非局部變量的一些基礎(chǔ)知識(shí)。

全局關(guān)鍵字簡(jiǎn)介

在Python中,global關(guān)鍵字允許您在當(dāng)前作用域之外修改變量。它用于創(chuàng)建全局變量并在局部上下文中對(duì)該變量進(jìn)行更改。

全局關(guān)鍵字規(guī)則

Python中g(shù)lobal關(guān)鍵字的基本規(guī)則是:

  • 當(dāng)我們?cè)诤瘮?shù)內(nèi)部創(chuàng)建變量時(shí),默認(rèn)情況下它是局部的。

  • 當(dāng)我們?cè)诤瘮?shù)外部定義變量時(shí),默認(rèn)情況下它是全局的。您不必使用global關(guān)鍵字。

  • 我們使用global關(guān)鍵字在函數(shù)內(nèi)部讀寫全局變量。

  • 在函數(shù)外使用global關(guān)鍵字無(wú)效

全局關(guān)鍵字的使用(示例)

讓我們舉個(gè)實(shí)例。

示例1:從函數(shù)內(nèi)部訪問(wèn)全局變量

c = 1 # 全局變量

def add():
    print(c)

add()

當(dāng)我們運(yùn)行上面的程序時(shí),輸出將是:

1

但是,在某些情況下,我們需要從函數(shù)內(nèi)部修改全局變量。

示例2:從函數(shù)內(nèi)部修改全局變量

c = 1 # 全局變量
    
def add():
    c = c + 2 # increment c by 2
    print(c)

add()

當(dāng)我們運(yùn)行上面的程序時(shí),輸出顯示錯(cuò)誤:

UnboundLocalError: local variable 'c' referenced before assignment

這是因?yàn)槲覀冎荒茉L問(wèn)全局變量,而不能從函數(shù)內(nèi)部對(duì)其進(jìn)行修改。

解決方案是使用global關(guān)鍵字。

示例3:使用global從函數(shù)內(nèi)部更改global變量

c = 0 # 全局變量

def add():
    global c
    c = c + 2 # increment by 2
    print("Inside add():", c)

add()
print("In main:", c)

當(dāng)我們運(yùn)行上面的程序時(shí),輸出將是:

Inside add(): 2
In main: 2

在上面的程序中,我們將c定義為add()函數(shù)內(nèi)部的全局關(guān)鍵字。
然后,將變量c增加1,即c = c + 2。之后,我們調(diào)用該add()函數(shù)。最后,我們打印全局變量c。
如我們所見,函數(shù)之外的全局變量也發(fā)生了變化c = 2。

跨Python模塊的全局變量

在Python中,我們創(chuàng)建一個(gè)模塊config.py來(lái)保存全局變量,并在同一程序中的Python模塊之間共享信息。

這是我們?nèi)绾卧趐ython模塊之間共享全局變量。

示例4:跨Python模塊共享全局變量

創(chuàng)建一個(gè)config.py文件,以存儲(chǔ)全局變量

a = 0
b = "empty"

創(chuàng)建一個(gè)update.py文件,更改全局變量

import config

config.a = 10
config.b = "alphabet"

創(chuàng)建一個(gè)main.py文件,以測(cè)試值的變化

import config
import update

print(config.a)
print(config.b)

當(dāng)我們運(yùn)行main.py文件時(shí),輸出將是

10
alphabet

在上文中,我們創(chuàng)建三個(gè)文件:config.py,update.py和main.py。

該模塊config.py存儲(chǔ)ab的全局變量。在update.py文件中,我們導(dǎo)入config.py模塊并修改ab的值。同樣,在main.py文件中,我們同時(shí)導(dǎo)入config.py和update.py模塊。最后,我們打印并測(cè)試全局變量的值,無(wú)論它們是否更改。

嵌套函數(shù)中的全局變量

這是在嵌套函數(shù)中使用全局變量的方法。

示例5:在嵌套函數(shù)中使用全局變量

def foo():
    x = 20

    def bar():
        global x
        x = 25
    
    print("在調(diào)用bar之前: ", x)
    print("立即調(diào)用bar")
    bar()
    print("在調(diào)用bar之后: ", x)

foo()
print("x在主體內(nèi): ", x)

輸出為:

在調(diào)用bar之前:  20
立即調(diào)用bar
在調(diào)用bar之后:  20
x在主體內(nèi):  25

在上面的程序中,我們?cè)谇短椎暮瘮?shù)bar()中聲明全局變量。在foo()函數(shù)中,x對(duì)全局關(guān)鍵字沒(méi)有影響。
在調(diào)用bar之前和之后,變量x接受局部變量的值,即x =20。在foo函數(shù)之外,變量x將采用bar函數(shù)中定義的值,即x =25。這是 因?yàn)槲覀冊(cè)趚中使用了global關(guān)鍵字在bar函數(shù)(局部作用域)內(nèi)創(chuàng)建了全局變量。
如果我們?cè)赽ar()函數(shù)中做了任何更改,那么這些更改就會(huì)出現(xiàn)在局部作用域之外,即foo()。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清