亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 1710 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條評論
主站蜘蛛池模板: 久久在精品线影院精品国产 | 日日干影院 | 四虎 2022 永久网站 | 精品一区二区三区免费毛片爱 | 成人免费xxx色视频 成人免费播放视频777777 | 久草免费看 | 中文字幕视频一区二区 | 中文字幕在线最新在线不卡 | 日本在线黄色 | 搜一级毛片 | 欧美人在线一区二区三区 | 日本高清中文字幕在线观穿线视频 | 天天干天天弄 | 久久99精品久久久久子伦 | 久久99国产精品成人 | 亚州综合激情另类久久久 | 元龙第三季动漫在线观看免费版 | 99久久精品免费看国产情侣 | 久久青青草视频 | 日本爱爱视频 | 日韩欧美在 | 免费观看午夜在线欧差毛片 | 真实的国产乱xxxx | 午夜精品久久久久久久四虎 | 在线欧美日韩国产 | 欧美日韩国产一区二区 | 久久99国产精品 | 综合网视频 | 精品国产一区二区三区19 | 亚洲国产aaa毛片无费看 | 狠狠色丁婷婷综合久久 | 奇米吧| 夜夜操天天干 | 亚洲视频一区二区三区四区 | 女bbwxxxx高清 | 在线有码 | 四虎在线视频观看 | 国产一区在线观看视频 | 香蕉视频国产在线观看 | 国产成人咱精品视频免费网站 | 天海冀一二三区 |