日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

解析python的局部變量和全局變量

系統 1909 0

局部變量

什么是局部變量

通俗定義:函數內部定義的變量就叫局部變量。

話不多說,代碼如下:

            
def test1():
 a = 300 # 定義一個局部變量a,并初始化300
 print("--test1--修改前:a=%s" % a)
 a = 200 # 給變量a重新賦值200
 print("--test1--修改后:a=%s" % a)
def test2():
 a = 400 # 定義另一個局部變量a,并初始化400
 print("--test2--修改后:a=%s" % a)
# 分別調用函數test1,test2
test1()
test2()
          

輸出:

--test1--修改前:a=300
--test1--修改后:a=200
--test2--修改后:a=400

結論:

  1. 局部變量就是在函數內部定義的變量。
  2. 不同的函數內部可以定義名字相同的變量,但它們不會產生影響。
  3. 局部變量的作用,為了臨時保存數據需要在需要在函數中定義變量來進行存儲。

全局變量

什么是全局變量

定義:如果一個變量既能在一個函數中使用,也可以在其他函數中使用,這樣的變量就是全局變量。?

代碼如下:

            
a = 100 # 定義一個全局變量a,并初始化為100
# 分別定義函數test1、test2,功能是打印變量a的值
def test1():
 print(a)
def test2():
 print(a)
test1()
test2()
"""
結果如下:
100
100
"""
          

如何修改全局變量的值

首先,我們可能是這樣想的:

            
a = 100 # 定義一個全局變量a,并初始化為100
# 分別定義函數test1、test2
def test1():
 print("修改前:a=%s"%a)
 a = 300
 print("修改后:a=%s"%a)
def test2():
 print(2)
test1()
test2()
"""
          

結果如下:

UnboundLocalError: local variable 'a' referenced before assignment

異常解釋:局部變量a在被引用前沒有被定義

            
"""
那我們把函數test1中的內容修改如下:

def test1():
 # print("修改前:a=%s"%a)
 a = 300
 print("修改后:a=%s"%a)

"""
結果如下:
修改后:a=300
100
"""
          

這次我們發現,錯誤消失了,函數test2中打印變量a的值并沒有改變還是100,這是為什么呢?

原因:如果一個全局變量在函數內被重新定義過,再在函數內使用變量則默認為局部變量;如果在函數內沒有被定義,直接使用會被視為全局變量。

此時,函數test1中的只是定義了一個名字相同的局部變量而已,并沒有改變全局變量的值。

global的使用

這前我們想的法子都不能修改全局變量的值,這下就該認識一個新的關鍵字?global ,它的功能就是如果需要在函數內定義(修改)全局變量,則要先用global進行聲明。

把之前的代碼修改如下:

            
a = 100 # 定義一個全局變量a,并初始化為100
# 分別定義函數test1、test2
def test1():
 global a # 聲明函數中使用的a是全局變量
 print("修改前:a=%s" % a)
 a = 300
 print("修改后:a=%s" % a)
def test2():
 print(2)
test1()
test2()

"""
結果如下:
修改前:a=100
修改后:a=300
300
"""
          

這下終于修改成功了。

可變類型與不可變類型的全局變量

發現我們之前定義的全局變量是數字類型,是屬于不可變類型的,那么修改一個可變類型的全局變量有什么不同呢?

            
a = [100, 200] # 定義一個列表全局變量a
# 分別定義函數test1、test2
def test1():
 print("修改前:a=%s" % a)
 a.append(300)
 print("修改后:a=%s" % a)
def test2():
 print(a)
test1()
test2()
"""

結果如下:

修改前:a=[100, 200]
修改后:a=[100, 200, 300]
[100, 200, 300]
"""
          

我們發現當全局變量為可變類型時,即使我們不是用global關鍵字聲明全局變量,它還是會被修改。

事實上:

  • 在函數中不是用global聲明全局變量時不能修改全局變量的本質是不能修改全局變量的指向,即不能將全局變量指向新的數據。
  • 對于不可變類型的全局變量來說,因其指向的數據不能被修改,所以不是用global時無法修改全局變量。
  • 對于可變類型的全局變量來說,因其指向的數據可以改變,所以不用global時可以修改全局變量。

總結

以上所述是小編給大家介紹的python的局部變量和全局變量,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 临海市| 延津县| 河源市| 来宾市| 界首市| 皮山县| 蕲春县| 宁武县| 建水县| 饶阳县| 攀枝花市| 镶黄旗| 茶陵县| 翼城县| 罗城| 比如县| 广灵县| 扶风县| 桐柏县| 黄骅市| 永定县| 繁峙县| 车险| 鹰潭市| 邵武市| 井陉县| 长治市| 南城县| 绥阳县| 旬阳县| 抚顺县| 图木舒克市| 广西| 茂名市| 九寨沟县| 隆尧县| 泰顺县| 泸州市| 九寨沟县| 皮山县| 思南县|