生成器
1、什么是生成器
生成的工具
生成器是一個"自定義"的迭代器,本質上就是一個迭代器
2、如何實作生成器
yield:生成器
每一次yield都會往生成器物件中添加一個值
yield只能在函式內部定義
yield可以保存函式的暫停狀態
# python內置的迭代器 # 可迭代物件 list1 = [1, 2, 3] # 迭代器物件:python內置的迭代器 list_iter = list1.__iter__()
# 自定義的迭代器 def func(): print("from func") yield 1, "bear", "pig" # return 1, "bear", "pig" res = func() # 當通過__next__取值時,才會執行函式體代碼 print(res.__next__())
在函式內部定義了的yield,呼叫函式時,函式體代碼不會執行,但是會回傳一個結果,該結果就是一個生成器
用公雞下蛋例子來解釋生成器生成程序:
def func(): print("公雞開始準備下蛋---") print("下蛋---1") yield "雞蛋1" print("下蛋---2") yield "雞蛋2" print("下蛋---3") yield "雞蛋3" print("下蛋---4") yield "雞蛋4" print("取最后一個蛋,查看是否下蛋成功") res = func() # 當通過__next__取值時,才會執行函式體代碼 # print(res.__next__()) # print(res.__next__()) # print(res.__next__()) # print(res.__next__()) # next(迭代器物件) 也可以取值 print(next(res)) print(next(res)) print(next(res)) print(next(res))
3、yield和return的區別
相同點:
回傳值的個數都是無限制的
不同點:
return只能回傳一次值
yield可以回傳多個值
def func(): print("from func") yield 1, "bear", "pig" yield 2, "apple", "orange" # return 1, "bear", "pig" res = func() print(res.__next__()) print(res.__next__())
4、自定義生成器
在python2中,range(1, 5)生成一個串列[1, 2, 3, 4]
在python3中,range(1, 5)生成range物件,這個物件又是一個生成器,而生成器的本質是一個迭代器,所以range(1, 5)是一個迭代器物件
# 自定義range功能,創建一個自定義的生成器 def my_range(start, end, move=1): while start < end: yield start start += move range_iter = my_range(1, 5, 2) print(range_iter) for line in range_iter: print(line)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/169920.html
標籤:其他
上一篇:python 閉包
下一篇:面向程序編程(Python)
