第一类对象
函數名的使用及第一類對象:
查看函數的內存地址 print(函數名)
函數可以當做值,賦值給變量
函數可以參數,傳遞個函數的形參 函數當參數的時候不能加括號
函數可以當返回值 當返回值的時候不括號
函數名可以元素存在容器里
1 def func1(): 2 print("念陽梟") 3 def func2(): 4 print("李星云") 5 def func3(): 6 print("百里登風") 7 def func4(): 8 print("李大白") 9 lst=[func1,func2,func3,func4] 10 #lst[0]() 11 for el in lst: # el是裂變中的每一項 12 el() # 拿到函數,執行函數
1 def wrapper(): 2 def inner(): 3 print("鍋包肉") 4 return inner # 函數名可以像返回值一樣返回 5 ret=wrapper() 6 ret() # 在函數外面訪問了函數內部的函數 函數可以傳參:
1 def func1(): 2 print("念陽梟") 3 def func2(): 4 print("李星云") 5 def func3(): 6 print("百里登風") 7 def func4(): 8 print("李大白") 9 # 代理,裝飾器的雛形 10 def proxy(a): # a就是變量,形參 函數可以傳參 11 print("我是代理") 12 a() 13 print("代理執行完畢") 14 proxy(func1) 15 proxy(func2) 16 proxy(func3) 閉包:
嵌套函數,在嵌套函數內,內部函數使用外部變量(非全局變量) 就是一個閉包 閉包可以多層 好處,
保護變量不會被外界修改
函數內使用到的變量會生命周期延長
節省開辟空間和銷毀空間的時間 迭代器:
可迭代對象: 遵守可迭代對象的協議 具有__iter__()方法
除去整型和布爾值剩下現已知都是 迭代器: 遵守迭代器的協議 具有__iter__()方法和__next__()方法
創建一個迭代器 == 可迭代對象.__iter__()
使用迭代器 == 迭代器.__next__() 1 lst=["張飛","亞索","呂布","雅典娜"] 2 it=lst.__iter__() #拿到的是迭代器 3 print(it.__next__()) #下一個 4 print(it.__next__()) #下一個 5 print(it.__next__()) #下一個 6 print(it.__next__()) #下一個 7 8 it=lst.__iter__() # 用此語句重新獲取迭代器,迭代器只能一次過 只能向下執行,不能反復
結束的時候會給我們扔出來一個錯誤, StopIteration
用while模擬for循環 for el in lst:
1 lst=["王者榮耀","英雄聯盟","QQ飛車","穿越火線"] 2 it=lst.__iter__() # 獲取迭代器0 3 while 1: #循環 4 try: #嘗試 5 el=it.__next__() # 拿數據 6 print(el) 7 except StopIteration: # 出了錯誤,except解決,數據拿完 8 break # 結束循環
不能回退
惰性機制
一次性的 查看是迭代器是否是可迭代對象:
from collections import Iterator,Iterable
print(isinstance('查看的內容',Iterable)) # 查看是否是可迭代的
print(isinstance('查看的內容',Iterator)) # 查看是否是迭代器 迭代器一定是可迭代的,但是可迭代的不一定是迭代器 ? ? ? ? ?
查看函數的內存地址 print(函數名)
函數可以當做值,賦值給變量
函數可以參數,傳遞個函數的形參 函數當參數的時候不能加括號
函數可以當返回值 當返回值的時候不括號
函數名可以元素存在容器里
1 def func1(): 2 print("念陽梟") 3 def func2(): 4 print("李星云") 5 def func3(): 6 print("百里登風") 7 def func4(): 8 print("李大白") 9 lst=[func1,func2,func3,func4] 10 #lst[0]() 11 for el in lst: # el是裂變中的每一項 12 el() # 拿到函數,執行函數
? ?可以把函數放到容器里:
1 def func1(): 2 print("念陽梟") 3 def func2(): 4 print("李星云") 5 def func3(): 6 print("百里登風") 7 def func4(): 8 print("李大白") 9 lst=[func1(),func2(),func3(),func4()] # 函數加上()就是調用函數,由于之前的函數沒有return值,所以打印列表中,裝的是None,這樣沒有任何作用! 10 print(lst) 函數名可以像返回值一樣返回:1 def wrapper(): 2 def inner(): 3 print("鍋包肉") 4 return inner # 函數名可以像返回值一樣返回 5 ret=wrapper() 6 ret() # 在函數外面訪問了函數內部的函數 函數可以傳參:
1 def func1(): 2 print("念陽梟") 3 def func2(): 4 print("李星云") 5 def func3(): 6 print("百里登風") 7 def func4(): 8 print("李大白") 9 # 代理,裝飾器的雛形 10 def proxy(a): # a就是變量,形參 函數可以傳參 11 print("我是代理") 12 a() 13 print("代理執行完畢") 14 proxy(func1) 15 proxy(func2) 16 proxy(func3) 閉包:
嵌套函數,在嵌套函數內,內部函數使用外部變量(非全局變量) 就是一個閉包 閉包可以多層 好處,
保護變量不會被外界修改
函數內使用到的變量會生命周期延長
節省開辟空間和銷毀空間的時間 迭代器:
可迭代對象: 遵守可迭代對象的協議 具有__iter__()方法
除去整型和布爾值剩下現已知都是 迭代器: 遵守迭代器的協議 具有__iter__()方法和__next__()方法
創建一個迭代器 == 可迭代對象.__iter__()
使用迭代器 == 迭代器.__next__() 1 lst=["張飛","亞索","呂布","雅典娜"] 2 it=lst.__iter__() #拿到的是迭代器 3 print(it.__next__()) #下一個 4 print(it.__next__()) #下一個 5 print(it.__next__()) #下一個 6 print(it.__next__()) #下一個 7 8 it=lst.__iter__() # 用此語句重新獲取迭代器,迭代器只能一次過 只能向下執行,不能反復
結束的時候會給我們扔出來一個錯誤, StopIteration
用while模擬for循環 for el in lst:
1 lst=["王者榮耀","英雄聯盟","QQ飛車","穿越火線"] 2 it=lst.__iter__() # 獲取迭代器0 3 while 1: #循環 4 try: #嘗試 5 el=it.__next__() # 拿數據 6 print(el) 7 except StopIteration: # 出了錯誤,except解決,數據拿完 8 break # 結束循環
?
? 迭代器機制:不能回退
惰性機制
一次性的 查看是迭代器是否是可迭代對象:
from collections import Iterator,Iterable
print(isinstance('查看的內容',Iterable)) # 查看是否是可迭代的
print(isinstance('查看的內容',Iterator)) # 查看是否是迭代器 迭代器一定是可迭代的,但是可迭代的不一定是迭代器 ? ? ? ? ?
轉載于:https://www.cnblogs.com/53Dawns/p/10251834.html
總結
- 上一篇: 群体稳定度指标PSI
- 下一篇: 20个高效阅读小技巧