什麼是生成器對象
自定義的迭代器對象--能夠自定義一個容器,存放多個值,能夠不依賴索引取值python
# 函數內部一旦有了yield , 函數名()就再也不是函數的調用獲得函數的結果,而是產生‘’生成器對象‘’ def fn(): yield 1 obj = fn() print(obj) # 生成器對象經過__next__()方法的去獲取yield的返回值,得到了就會中止執行
def func(): print("娃哈哈") yield 1 #return和yield均可以返回數據 print("呵呵呵") gen = func() #不會執行函數,拿到的是生成器 ret = gen.__next__() #會執行到下一個yield print(ret) gen.__next__() # 函數中若是有yield,這個函數就是生成器函數 # yield: 至關於return能夠返回數據,但yield不會完全中斷函數,而是分段執行函數 # gen.__next__() 執行函數,執行到下一個yield # gen.__next__() 繼續執行函數到下一個yield
# 佔內存演示 def order(): lst = [] for i in range(10000): lst.append("衣服"+str(i)) return lst ll = order() # 上面的實例可能致使很是佔用內存,致使崩潰
def order(): for i in range(10000) yield "衣服」+str(i) g = order() #獲取生成器 mingwei = g.__next__() # ===> 衣服0 print(mingwei) zhaoyining = g.__next__()) # ===> 衣服1 print(zhaoyiming) # 要一件衣服的時候取一件,不會形成內存佔用太高,致使崩潰
就是能夠生成一個能夠無限取值的容器。app
python 2.x中沒有生成器概念: range() 會給出所有的量[a, b, c, d,......n]
python 3.x中引入生成器概念: range() 會給出range(a, b)函數