# 比較特殊,正常來講臨時空間執行結束後應該刪除,但在這裏不是. def func(a,l=[]): l.append(a) return l print(func(1)) # [1] print(func(2)) # [1,2] print(func(3)) # [1,2,3]
函數名指向的是函數的內存地址,加上()就執行這個函數python
def func(args): return args print(func) # <function func at 0x00000000024656A8> print(func(1)) # 1
函數名是一個變量app
def age1(a): return a age2=age1 age3=age2 print(age3(1)) # 1
函數名能夠做爲容器類類型的元素函數
def func1(): print("in func1") def func2(): print("in func2") def func3(): print("in func3") l=[func1,func2,func3] print(l) # [<function func1 at 0x00000000024956A8>, <function func2 at 0x0000000002495730>, <function func3 at 0x00000000024957B8>] for i in l: i() # in func1 # in func2 # in func3
函數名能夠做爲函數的實參進行傳參工具
def func(argv): print(argv) def func1(): print("in func1") def func2(argv): argv() print("in func2") a=1 func(a) # 1 func2(func1) # in func1 # in func2
函數名能夠做爲函數的返回值code
def func1(): print("in func1") def func2(argv): print("in func2") return argv ret=func2(func1) print(ret) # in func2 # <function func1 at 0x0000000001DF56A8>
字面意思分析 : 能夠重複迭代的實實在在的東西,list,dict,keys(),values(),tuple,str,set,range,文件句柄這些都屬於可迭代對象對象
專業角度分析 : 內部含有'_ iter _'方法的對象,就是可迭代對象索引
內置函數 : dir()用來獲取對象內部屬性的方法,可用來判斷對象是否符合可迭代要求.內存
缺點 : 佔用內存(字典除外),不能迭代取值,索引,字典keyit
字面意思分析 : 能夠重複迭代的工具io
專業角度分析 : 內部含有'_ iter_ '而且含有'_ next _'方法的對象,就是迭代器
可迭代對象轉化成迭代器用iter(),迭代器能夠迭代取值,利用next()進行取值,迭代器一條路走到底,不走回頭路
優勢 : 很是節省內存,惰性機制
缺點 : 不直觀,操做不靈活,效率相對低
l1=[1,2,3,4,5] obj=iter(l1) print(next(obj)) # 1 print(next(obj)) # 2 print(next(obj)) # 3 print(next(obj)) # 4 print(next(obj)) # 5 print(next(obj)) # 報錯
利用while循環,模擬for循環內部循環可迭代對象機制
先要將可迭代對象轉化成迭代器
利用next()對迭代器進行取值
利用異常處理try,處理報錯
l1=[1,2,3,4,5] l2=iter(l1) while 1: try: print(next(l2)) except StopIteration: pass