91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中變量的作用域實例分析

發布時間:2022-01-31 10:07:32 來源:億速云 閱讀:182 作者:iii 欄目:開發技術

這篇“Python中變量的作用域實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python中變量的作用域實例分析”文章吧。

1、作用于的概念

變量作用域指的是變量生效的范圍,在Python中一共有兩種作用域。

全局作用域

全局作用域在程序執行時創建,在程序執行結束時銷毀。所有函數以外的區域都是全局作用域。在全局作用域中定義的變量,都屬于全局變量,全局變量可以在程序的任意位置被訪問。

函數作用域

函數作用域在函數調用時創建,在調用結束時銷毀。函數每調用一次就會產生一個新的函數作用域(不調用不產生)。在函數作用域中定義的變量,都是局部變量,它只能在函數內部被訪問。

2、局部變量

所謂局部變量是定義在函數體內部的變量,即只在函數體內部生效。

def testA():
    # 局部變量a
    # 在函數中為變量賦值時,默認都是為局部變量賦值
    # 局部變量不會影響函數外的變量。
    a = 100
    # 函數體內部訪問,能訪問到a變量
    print(a)


testA()  # 100
print(a)  # 報錯:name 'a' is not defined

變量a是定義在testA函數內部的變量,在函數外部訪問則立即報錯。

局部變量的作用:在函數體內部,臨時保存數據,即當函數調用完成后,則銷毀局部變量。

3、全局變量

所謂全局變量,指的是在函數體內、外都能生效的變量。

思考:如果有一個數據,在函數A和函數B中都要使用,該怎么辦?

答:將這個數據存儲在一個全局變量里面。

# 定義全局變量a
a = 100

def testA():
    print(a)  # 訪問全局變量a,并打印變量a存儲的數據

def testB():
    print(a)  # 訪問全局變量a,并打印變量a存儲的數據

testA()  # 100
testB()  # 100

思考:testB函數需求修改變量a的值為200,如何修改程序?

a = 100

def testA():
    print(a)

def testB():
    a = 200
    print(a)

testA()  # 100
testB()  # 200
print(f'全局變量a = {a}')  # 全局變量a = 100

思考:在testB函數內部的a = 200中的變量a是在修改全局變量a嗎?

答:不是。觀察上述代碼發現,15行得到a的數據是100,仍然是定義全局變量a時候的值,而沒有返回

testB函數內部的200。綜上:testB函數內部的a = 200是定義了一個局部變量。

(1)global關鍵字

思考:如何在函數體內部修改全局變量?

a = 100

def testA():
    print(a)

def testB():
    # 想要修改全局變量a的值是200
    # global 關鍵字聲明a是全局變量
    global a
    a = 200
    print(a)


testA()  # 100
testB()  # 200
print(f'全局變量a = {a}')  # 全局變量a = 200

global關鍵字的作用是,在函數內部聲明一個變量為全局變量。換句話說如果希望在函數內部修改全局變量,則需要使用global關鍵字來聲明變量。

(2)總結

如果在函數里面直接把變量a=200賦值,此時的a不是全局變量的修改,而是相當于在函數內部聲明了一個新的局部變量。函數體內部修改全局變量: 先global聲明a為全局變量,然后再變量重新賦值。

4、變量的查找

當我們使用變量時,會優先在當前作用域中尋找該變量,如果有則使用,

如果沒有則繼續去上一級作用域中尋找,如果有則使用,

如果依然沒有則繼續去上一級作用域中尋找,以此類推。

直到找到全局作用域,依然沒有找到,則會拋出異常 NameError: name 'a' is not defined

# 練習說明
a = 10
def fn2():
    def fn3():
        a = 30
        print('fn3中:','a =',a)
    fn3()
    print('fn2中:','a =',a)

fn2()
"""
輸出結果:
fn3中: a = 30
fn2中: a = 10
"""

5、作用域中可變數據類型變量

c = 10
def fn4(a):
    # 在函數中對形參進行重新賦值,不會影響其他的變量
    a = 20
    print('a =', a, id(a))

fn4(c)
print('c =', c, id(c))
"""
輸出結果:
a = 20 8791349231264
c = 10 8791349230944
"""


# 如果形參接收到的數據是一個全局列表
# 當在函數內嘗試修改列表中的元素時,全局列表的數據也會發生改變
c = [1,2,3]
def fn4(a):
    # 如果形參執行的是一個對象,當我們通過形參去修改對象時
    # 會影響到所有指向該對象的變量
    a[0] = 100
    print('a =', a, id(a))

fn4(c)
print('c =', c, id(c))
"""
輸出結果:
a = [100, 2, 3] 5132808
c = [100, 2, 3] 5132808
"""


# 如果我們不向全局變量有所改動
# 就需要使用我們之前學過的淺復制,
# 或者傳入一個切片,就可以解決
c = [1, 2, 3]

def fn4(a):
    # 在函數中對形參進行重新賦值,不會影響其他的變量
    a[0] = 100
    print('a =', a, id(a))

fn4(c.copy())
# fn4(c[:])
print('c =', c, id(c))
"""
輸出結果:
a = [100, 2, 3] 6050824
c = [1, 2, 3] 6050312
"""

6、多函數程序執行流程

一般在實際開發過程中,一個程序往往由多個函數組成,并且多個函數共享某些數據,如下所示:

(1)共用全局變量

# 1. 定義全局變量
glo_num = 0

def test1():
    global glo_num
    # 修改全局變量
    glo_num = 100

def test2():
    # 調用test1函數中修改后的全局變量
    print(glo_num)


# 2. 調用test1函數,執行函數內部代碼:聲明和修改全局變量
test1()
# 3. 調用test2函數,執行函數內部代碼:打印
test2()  # 100

(2)返回值作為參數傳遞

# 先得到函數一的返回值,再把這個返回值傳入到函數二
def test1():
    return 50

def test2(num):
    print(num)


# 1. 保存函數test1的返回值
result = test1()

# 2.將函數返回值所在變量作為參數傳遞到test2函數
test2(result)  # 50

以上就是關于“Python中變量的作用域實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜都市| 栾川县| 延寿县| 大冶市| 凉山| 徐水县| 乌鲁木齐县| 延安市| 晴隆县| 竹山县| 斗六市| 灌南县| 三河市| 池州市| 略阳县| 务川| 二连浩特市| 定边县| 宜川县| 廊坊市| 晋中市| 惠安县| 石狮市| 上饶县| 县级市| 银川市| 乌鲁木齐市| 大兴区| 通州区| 马关县| 鄂托克旗| 余姚市| 林口县| 启东市| 武山县| 岐山县| 昭通市| 内乡县| 永胜县| 静安区| 丁青县|