函数(三)
1.函數名的應用(第一類對象)
函數名的命名規范和變量是一樣的
函數名其實就是變量名
1.可以作為列表中的元素進行存儲
1 def func1(): 2 pass 3 def func2(): 4 pass 5 lst = [func1,func2] 6 for el in lst: 7 el()
2.可以作為參數傳遞給函數
1 def fun(): 2 pass 3 def proxy(fn): 4 fn() 5 proxy(func)
3.可以作為函數的返回值
1 def fun(): 2 def inner(): 3 pass 4 return inner 5 fun()()2.閉包
閉包:在內層函數中訪問外層函數的局部變量
好處:
1.保護你的變量不受外界影響
2.可以讓變量常駐內存
3.寫法:
1 def outer(): 2 a = 10 3 def inner(): 4 print(a) 5 return inner
3.迭代器
使用dir來查看該數據包含了哪些方法
1 print(dir(str))#有__iter__ 2 print(dir(int))#沒有__iter__ 3 print(dir(list))#有__iter__4 print(dir(tuple))#有__iter__
?
用來遍歷字符串,列表,元組...等可迭代對象
可迭代對象:iterable,里面有__iter__()可以獲取迭代器,沒有__next__()
迭代器:iterator,里面有__iter__()可以獲取迭代器,有__next__()
所有的帶__iter__可以使用for循環,是可迭代對象
可迭代對象可以使用__iter__()來獲取迭代器,迭代器里面有__next__()
迭代器的特點:
1.只能向前
2.惰性機制
3.省內存(生成器)
迭代器模擬for循環:
1 lst = [1,2,3,4,5] 2 for el in lst: 3 print(el) 4 5 lst = [1,2,3,4,5] 6 it = lst.__iter__()#獲取迭代器 7 while 1: 8 try:#嘗試執行 9 el = it.__next__() 10 print(el) 11 except StopIteration:#處理錯誤 12 break
?
通過dir來判斷數據是否是可迭代的,以及數據是否是迭代器
1 print("__iter__" in dir(it)) 2 print("__next__" in dir(it))通過isinstance()來判斷
1 from collections inport Iterable#可迭代對象 2 from collections import Iterator#迭代器 3 4 5 print(isstance(lst,Iterable)) 6 print(isstance(lst,Iterator))把參數放在list()里面進行迭代
1 lst = [1,2,3,4,5] 2 it = lst.__iter__() 3 s = list(it) 4 print(s)結果為[1,2,3,4,5]
for 循環的內部機制:
1.首先獲取到迭代器
2.使用while循環獲取數據
3.it.__next__()來獲取數據
4.處理異常 tyr:xxx except StopIteration:xxx
1 it = xx.__iter__() 2 while 1: 3 try: 4 data = it.__next__() 5 xxx 6 except StopIteration: 7 break
?
轉載于:https://www.cnblogs.com/s593941/p/9455775.html
總結
- 上一篇: 时间单位
- 下一篇: python 制作wordcloud词云