python函式區域性變數、全域性變數、遞迴知識點總結
阿新 • • 發佈:2020-01-09
函式區域性變數 全域性變數 及其作用域
#簡單型別(int str等)變數的區域性變數與全域性變數及其作用域的關係 name = "xxx" #第一級頂頭定義的變數都稱為全域性變數,其作用域從變數定義的位置開始到此程式結束 def Print_Name(): print("name before change:",name) #由於name在此函式之前已經被定義為全域性變數,此處函式讀取變數name是讀取的全域性變數name “xxx”,函式內部就不能再定義其同名區域性變數,否則無法區分變數為區域性變數還是全域性變數 # name = "yyy" #此語句放開以後會報錯:IndentationError: unindent does not match any outer indentation level Print_Name() def Change_Name(): name = "yyy" #函式內部首先定義全域性變數的同名區域性變數,則整個函式內部操作的為區域性變數(一個與全域性變數同名的臨時變數) print("name after change is",name) Change_Name() # yyy實際輸出的是區域性變數的值 print("global name is",name) # xxx此處訪問的是全域性變數,因為此print語句不是在Change_Name內部。 #函式內部需要強制對全域性變數進行修改,使用global關鍵字 def Change_global_Name(): global name print("name before change is :",name) name = "yyy" Change_global_Name() # xxx 修改前的全域性變數 print("global name is :",name) # yyy此處由於函式內強制宣告name為global變數,整個函式內部可以對global進行操作 #複雜資料型別列表 集合 字典等複雜資料結構如果函式外部定義了函式裡面是可以不用global宣告也操作的是全域性變數,沒有區域性變數一說了 names = ['111','222','333'] def Change_Names(): names[0] = "444" print("in function names :",names) Change_Names() #in function names : ['444','333'] print("global names :",names) #in function names : ['444','333'] 對於複雜的資料型別,函式內直接操作全域性變數,不會再生成區域性變數
遞迴
#函式內部可以呼叫其它函式,如果函式在內部呼叫自己就被稱為遞迴函式 def Half_fun(n): print(n) if n < 2: return n Half_fun(n/2) Half_fun(100) #遞迴特性:1、必須有一個明確的結束條件 2、每次遞迴呼叫問題複雜度需要相比上次簡化 3、遞迴會佔用大量記憶體
以上例項很簡單,大家可以本次測試下,感謝你的閱讀和對我們的支援。