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