第十二篇 Python函數之全域變數&局部變數&遞迴函式

來源:互聯網
上載者:User

標籤:nonlocal   自己   嵌套   bubuko   例子   東北   全域   info   地方   

全域變數:在定義的時候,頂頭寫的,沒有任何縮排的變數就是全域變數。

全域變數的特點:在當前檔案裡的任何地方都可以進行調用

局部變數:在子程式裡定義的變數,就是局部變數。

子程式:比如.py檔案裡,寫的函數就是個子程式。而這個函數裡定義的變數就是局部變數

樣本:全域變數

# 全域變數name=‘alex‘  def change_name():    print(‘change_name‘,name)  # 調用了全域變數change_name()# 結果change_name alexprint(name)    #調的是全域變數# 結果alex

樣本:函數體內定義局部變數

# 全域變數:全域範圍name=‘alex‘def change_name():    name=‘帥呆了‘  # 局部變數:局部範圍    print(‘change_name‘,name)  # 先在自己的子程式裡找,調用了局部變數# 舉個生活中的例子,剛起床找手機,肯定現在自己臥室(函數)找,自己臥室找不到,才可能會到臥室(函數之外)之外去找。# 所以,很好的理解,就是優先內部,然後外部;局部變數只能該函數自己使用(私心重),全域變數就比較大方,誰需要就可以拿去用change_name()       # 結果change_name 帥呆了print(name)    #調的是全域變數# 結果alex

樣本:函數體內聲明全域變數

# 全域變數name=‘alex‘def change_name():    global name     # 函數體內聲明了全域變數    name=‘帥呆了‘    # 函數體內修改了全域變數的值    print(‘change_name‘,name)  # 調用了全域變數change_name()# 結果change_name 帥呆了print(name)    #調的是全域變數,但是全域變數的值已經被修改# 結果帥呆了

更好的樣本

如果函數的內容無global關鍵字,優先讀取局部變數;如果沒有局部變數,只能讀取全域變數,無法對全域變數重新賦值,但於可變類型,是可以對內部元素進行操作

如果函數的內容有global關鍵字,函數內的變數就是全面局變數,可以讀取,可以賦值

name = "桃花李"def yangjian():    global name # 已經聲明,NAME就是全域的的那個變數    print(‘我要‘, name)    name = "小東北"  # 修改 全域的變數    print(‘我要‘, name)def qupengfei():    name = "基"    print(‘我要搞‘, name)yangjian()qupengfei()#結果我要 桃花李我要 小東北我要搞 基

總結

全域變數變數名大寫
局部變數變數名小寫
下面的樣本為了說明全域變數和局部變數的關係,都用的是大寫。

# 如果函數的內容無global關鍵字:
# - 有聲明局部變數NAME = ["產品經理","廖波濕"]def qupengfei(): NAME = "自己" print(‘我要搞‘, NAME)qupengfei()# - 無聲明局部變數NAME = ["產品經理","廖波濕"]def qupengfei(): NAME.append(‘XXOO‘) print(‘我要搞‘, NAME)qupengfei()# 如果函數的內容有global關鍵字# - 有聲明局部變數NAME = ["產品經理","廖波濕"]def qupengfei(): global NAME NAME = "自己" print(‘我要搞‘, NAME)qupengfei() # 錯誤樣本, 全部變數放在了局部變數的下面,是不行的;所以,如果要什麼全域變數,就盡量往前放。NAME = ["產品經理","廖波濕"]def qupengfei(): NAME = "自己" global NAME print(‘我要搞‘, NAME) qupengfei()# - 無聲明局部變數NAME = ["產品經理","廖波濕"]def qupengfei(): global NAME NAME = ["阿毛"] NAME.append(‘XXOO‘) print(‘我要搞‘, NAME)qupengfei()

函數裡也可以嵌套函數,執行順序如所示

  

name=‘海風‘def huangwei():    name = "黃偉"    print(name)    def liuyang():        name = "劉洋"        print(name)        def nulige():            name = ‘爐指花‘            print(name)        print(name)        nulige()    liuyang()    print(name)huangwei()# 結果黃偉劉洋劉洋爐指花黃偉

name = "剛娘"def weihou():    name = "陳卓"    def weiweihou():        global name   # global,聲明的是全域變數,        name = "冷靜"  # 此處修改的是最外層的全域變數,而不是它上一級同名變數    weiweihou()    print(name)print(name)weihou()print(name)#結果剛娘陳卓冷靜

name = "剛娘"def weihou():    name = "陳卓"    def weiweihou():        nonlocal name   # nonlocal,指定上一級變數,如果沒有就繼續往上直到找到為止        name = "冷靜"    weiweihou()    print(name)print(name)weihou()print(name)# 結果剛娘冷靜剛娘

 

第十二篇 Python函數之全域變數&局部變數&遞迴函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.