最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中變量的作用域詳解

 更新時間:2022年01月27日 15:02:52   作者:繁華似錦Fighting  
大家好,本篇文章主要講的是Python中變量的作用域詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

1、作用于的概念

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

全局作用域

全局作用域在程序執(zhí)行時創(chuàng)建,在程序執(zhí)行結(jié)束時銷毀。所有函數(shù)以外的區(qū)域都是全局作用域。在全局作用域中定義的變量,都屬于全局變量,全局變量可以在程序的任意位置被訪問。

函數(shù)作用域

函數(shù)作用域在函數(shù)調(diào)用時創(chuàng)建,在調(diào)用結(jié)束時銷毀。函數(shù)每調(diào)用一次就會產(chǎn)生一個新的函數(shù)作用域(不調(diào)用不產(chǎn)生)。在函數(shù)作用域中定義的變量,都是局部變量,它只能在函數(shù)內(nèi)部被訪問。

2、局部變量

所謂局部變量是定義在函數(shù)體內(nèi)部的變量,即只在函數(shù)體內(nèi)部生效。

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


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

變量a是定義在testA函數(shù)內(nèi)部的變量,在函數(shù)外部訪問則立即報錯。

局部變量的作用:在函數(shù)體內(nèi)部,臨時保存數(shù)據(jù),即當(dāng)函數(shù)調(diào)用完成后,則銷毀局部變量。

3、全局變量

所謂全局變量,指的是在函數(shù)體內(nèi)、外都能生效的變量。

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

答:將這個數(shù)據(jù)存儲在一個全局變量里面。

# 定義全局變量a
a = 100

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

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

testA()  # 100
testB()  # 100

思考:testB函數(shù)需求修改變量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函數(shù)內(nèi)部的a = 200中的變量a是在修改全局變量a嗎?

答:不是。觀察上述代碼發(fā)現(xiàn),15行得到a的數(shù)據(jù)是100,仍然是定義全局變量a時候的值,而沒有返回

testB函數(shù)內(nèi)部的200。綜上:testB函數(shù)內(nèi)部的a = 200是定義了一個局部變量。

(1)global關(guān)鍵字

思考:如何在函數(shù)體內(nèi)部修改全局變量?

a = 100

def testA():
    print(a)

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


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

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

(2)總結(jié)

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

4、變量的查找

當(dāng)我們使用變量時,會優(yōu)先在當(dāng)前作用域中尋找該變量,如果有則使用,

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

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

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

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

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

5、作用域中可變數(shù)據(jù)類型變量

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

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


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

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


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

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

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

6、多函數(shù)程序執(zhí)行流程

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

(1)共用全局變量

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

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

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


# 2. 調(diào)用test1函數(shù),執(zhí)行函數(shù)內(nèi)部代碼:聲明和修改全局變量
test1()
# 3. 調(diào)用test2函數(shù),執(zhí)行函數(shù)內(nèi)部代碼:打印
test2()  # 100

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

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

def test2(num):
    print(num)


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

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

總結(jié)

到此這篇關(guān)于Python中變量的作用域詳解的文章就介紹到這了,更多相關(guān)Python變量的作用域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 實現(xiàn)數(shù)組相減示例

    Python 實現(xiàn)數(shù)組相減示例

    今天小編就為大家分享一篇Python 實現(xiàn)數(shù)組相減示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python腳本Selenium及頁面Web元素定位詳解

    Python腳本Selenium及頁面Web元素定位詳解

    這篇文章主要為大家介紹了Python腳本中如何使用Selenium定位頁面Web元素的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Python判斷兩個文件是否相同與兩個文本進(jìn)行相同項篩選的方法

    Python判斷兩個文件是否相同與兩個文本進(jìn)行相同項篩選的方法

    今天小編就為大家分享一篇關(guān)于Python判斷兩個文件是否相同與兩個文本進(jìn)行相同項篩選的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • python繪制分組條形圖的示例代碼

    python繪制分組條形圖的示例代碼

    本文主要介紹了如何使用python繪制分組條形圖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 實例說明Python中比較運算符的使用

    實例說明Python中比較運算符的使用

    這篇文章主要介紹了=Python中比較運算符的使用,是Python學(xué)習(xí)當(dāng)中的基本知識,需要的朋友可以參考下
    2015-05-05
  • Python正則表達(dá)式中的'r'用法總結(jié)

    Python正則表達(dá)式中的'r'用法總結(jié)

    正則表達(dá)式即使用一個字符串來描述、匹配一系列某個語法規(guī)則的字符串,python中r作用是除去''里面轉(zhuǎn)意字符,在pyhton自動化中比較常用的,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式中的'r'用法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Python數(shù)據(jù)抓取爬蟲代理防封IP方法

    Python數(shù)據(jù)抓取爬蟲代理防封IP方法

    在本篇內(nèi)容里小編給大家分享了關(guān)于Python數(shù)據(jù)抓取爬蟲代理防封IP方法講解,需要的朋友們可以跟著學(xué)習(xí)下。
    2018-12-12
  • Python多進(jìn)程multiprocessing用法實例分析

    Python多進(jìn)程multiprocessing用法實例分析

    這篇文章主要介紹了Python多進(jìn)程multiprocessing用法,結(jié)合實例形式分析了Python多線程的概念以及進(jìn)程的創(chuàng)建、守護(hù)進(jìn)程、終止、退出進(jìn)程、進(jìn)程間消息傳遞等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • python3.6編寫的單元測試示例

    python3.6編寫的單元測試示例

    這篇文章主要介紹了python3.6編寫的單元測試,結(jié)合實例形式分析了Python3.6使用unittest模塊進(jìn)行單元測試的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-08-08
  • Python多線程爬取豆瓣影評API接口

    Python多線程爬取豆瓣影評API接口

    這篇文章主要介紹了Python多線程爬取豆瓣影評API接口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10

最新評論

鄄城县| 灵丘县| 油尖旺区| 壶关县| 佛冈县| 秦皇岛市| 新蔡县| 云安县| 定南县| 黄陵县| 凤城市| 阿图什市| 石狮市| 射阳县| 兴和县| 西藏| 渝中区| 静宁县| 砀山县| 勐海县| 永昌县| 壤塘县| 泰州市| 德化县| 东兰县| 吴川市| 敦化市| 南华县| 永州市| 都安| 凭祥市| 忻城县| SHOW| 微博| 元江| 普陀区| 枞阳县| 公主岭市| 芜湖县| 金平| 金川县|