第十二篇 Python函數之全局變量&局部變量&遞歸函數
阿新 • • 發佈:2018-06-02
量變 錯誤 總結 bsp code 類型 hang qup 說明
全局變量:在定義的時候,頂頭寫的,沒有任何縮進的變量就是全局變量。
全局變量的特點:在當前文件裏的任何地方都可以進行調用
局部變量:在子程序裏定義的變量,就是局部變量。
子程序:比如.py文件裏,寫的函數就是個子程序。而這個函數裏定義的變量就是局部變量
示例:全局變量
# 全局變量 name=‘alex‘ def change_name(): print(‘change_name‘,name) # 調用了全局變量 change_name() # 結果 change_name alex print(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函數之全局變量&局部變量&遞歸函數