函數名本質上就是函數的內存地址。閉包
1,。能夠被引用函數
2. 能夠被當作容器類的元素spa
3.能夠當作函數的參數和返回值對象
第一類對象(first-class object)指 1.可在運行期建立 2.可用做函數參數或返回值 3.可存入變量的實體
閉包函數:
#輸出的__closure__有cell元素 :是閉包函數 def func(): name = 'eva' def inner(): print(name) print(inner.__closure__) return inner f = func() f() #輸出的__closure__爲None :不是閉包函數 name = 'egon' def func2(): def inner(): print(name) print(inner.__closure__) return inner f2 = func2() f2()
迭代器:
假如咱們本身寫了一個數據類型,但願這個數據類型裏的東西也能夠使用for被一個一個的取出來,那咱們就必須知足for的要求。這個要求就叫作「協議」。內存
能夠被迭代要知足的要求就叫作可迭代協議。可迭代協議的定義很是簡單,就是內部實現了__iter__方法。it
可迭代的:內部必須含有一個__iter__方法。io
迭代器遵循迭代器協議:必須擁有__iter__方法和__next__方法。for循環
for循環,能遍歷一個可迭代對象,他的內部到底進行了什麼?class
l = [1,2,3,4] l_iter = l.__iter__() while True: try: item = l_iter.__next__() print(item) except StopIteration: breakltem=iter(l)