变量与递归函数
| 變量與遞歸函數 |
一、變量
變量分為全局變量和局部變量。
python中全局變量和局部變量的最大區別在于局部變量只能通過函數去訪問,而全局變量可以直接訪問。
舉個例子:
name = 'linxu' #全局變量 def change_name():name='python' #局部變量print(name) #打印局部變量,結果為:python change_name() print(name) #打印全局變量,結果為:linux如果將函數內的局部變量轉換為全局變量,需要使用到關鍵字global引用全局變量。
name = 'linxu' #全局變量 def change_name():global name #引用全局變量,可將函數內后面出現局部變量name轉換為全局變量name='python' #局部變量print(name) #結果為:python change_name() print(name) #結果為:python函數的內部無global關鍵字,優先讀取局部變量,無局部變量然后能讀取全局變量,無法對全局變量重新賦值,但是對于可變類型,可以對內部元素進行操作。
函數的內部有global關鍵字,變量本質上就是全局的那個變量,可讀取可賦值。
如果需要引用到上一級變量,則使用關鍵字nonlocal:
name = "張三" def change_name():name = "李四"def change_name1():nonlocal namename = "王五"change_name1()print(name) #結果為:王五 print(name) #結果為:張三 change_name() print(name) #結果為:張三講到變量就要提提風濕理論,風濕理論的定義:函數即變量。
風濕理論總的來講就是代碼從上到下執行,遇到定義的函數體,內存便為其開辟空間,但不執行。程序需要調用函數時,才會執行函數體的內容。如果一個函數還未開辟空間就先調用,就會報錯。
def foo():print("this is foo")bar() foo() def bar():print("this is bar")這段代碼就會報錯,因為bar()函數未被開辟空間就先調用了。
二、遞歸函數
遞歸調用是函數嵌套調用的一種特殊形式,函數在調用時,直接或間接調用了自身,就是遞歸調用。 def calc(n):print(n)if int(n/2) == 0:return nres = calc(int(n/2)) #遞歸調用return res calc(10)總結遞歸的調用:
- 必須有一個明確的結束條件
- 每次進入更深遞歸時,問題規模相比上次遞歸都應有所減少
- 遞歸效率低
遞歸作業:遞歸問路,假設lisi知道路
import time person_list = ['alex','zhangsan','lisi','wangwu'] def ask_way(person_list):if len(person_list) == 0:return '沒人知道路'person = person_list.pop(0)if person == 'lisi':return '%s說:我知道路,就是。。。' %personprint('hi 朋友[%s],請問路怎么走' %person)print('%s回答道:我不知道,不過我可以幫你問%s' %(person,person_list))time.sleep(2)res = ask_way(person_list)print('%s問的結果是:%res' %(person,res))return res res = ask_way(person_list) print(res)?
轉載于:https://www.cnblogs.com/lzc69/p/11098698.html
總結
- 上一篇: Bash 脚本 set 命令教程
- 下一篇: 盒模型应用