day11函數名,閉包,迭代器

函數名本質上就是函數的內存地址。閉包

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

  • 將可迭代對象轉化成迭代器。(可迭代對象.__iter__())
  • 內部使用__next__方法,一個一個取值。
  • 加了異常處理功能,取值到底後自動中止。
l = [1,2,3,4]
l_iter = l.__iter__()
while True:
    try:
        item = l_iter.__next__()
        print(item)
    except StopIteration:
        breakltem=iter(l)
相關文章
相關標籤/搜索