Python yield 用法
yield 用法說明
yield 簡單說來就是一個生成器,生成器是這樣一個函式,它記住上一次返回時在函式體中的位置。對生成器函式的第二次(或第 n 次)呼叫跳轉至該函式中間,而上次呼叫的所有區域性變數都保持不變。
-
生成器 是 一個函式
函式的所有引數都會保留
-
第二次呼叫 此函式 時
使用的引數是前一次保留下的.
-
生成器還“記住”了它在流控制構造
生成器不僅“記住”了它資料狀態。 生成器還“記住”了它在流控制構造(在指令式程式設計中,這種構造不只是資料值)中的位置。由於連續性使您在執行框架間任意跳轉,而不總是返回到直接呼叫者的上下文(如同生成器那樣),因此它仍是比較一般的。
yield 生成器的執行機制
當你問生成器要一個數時,生成器會執行,直至出現 yield 語句,生成器把 yield 的引數給你,之後生成器就不會往下繼續執行。 當你問他要下一個數時,他會從上次的狀態開始執行,直至出現yield語句,把引數給你,之後停下。如此反覆直至退出函式。
例子:Python 排列,組合生成器
#生成全排列
def perm(items, n=None):
if n is None:
n = len(items)
for i in range(len(items)):
v = items[i:i+1]
if n == 1:
yield v
else:
rest = items[:i] + items[i+1:]
for p in perm(rest, n-1):
yield v + p
#生成組合
def comb(items, n=None):
if n is None:
n = len(items)
for i in range(len(items)):
v = items[i:i+1]
if n == 1:
yield v
else:
rest = items[i+1:]
for c in comb(rest, n-1):
yield v + c
a = perm('abc')
for b in a:
print b
break
print '-'*20
for b in a:
print b
結果如下:
102 pvopf006 ~/test> ./generator.py abc -------------------- acb bac bca cab cba
可以看到,在第一個迴圈break後,生成器沒有繼續執行,而第二個迴圈接著第一個迴圈執行
相關文章
- python yield和yield from用法總結 木槿惜年2013Python
- Python學習筆記-yield用法及優點Python筆記
- PHP yield 高階用法——網路PHP
- python中yield的用法詳解——最簡單,最清晰的解釋Python
- PHP yield from 生成器用法探究 (二)PHP
- PHP yield 協程 生成器用法探究 (一)PHP
- Python學習筆記|Python之yield理解Python筆記
- 深入理解python中的yieldPython
- Python教程:return和yield的區別Python
- 深入理解Python的yield from語法Python
- 【python】非同步IO | 協程 | asyncio | await | yieldPython非同步AI
- php yieldPHP
- [Javascript] yield*JavaScript
- python xpath用法Python
- python print 用法Python
- python match用法Python
- Python 程式碼中的 yield 到底是什麼?Python
- 神奇的yield
- Python字典dict用法Python
- python-lambda用法Python
- python pil resize 用法Python
- Python迭代和解析(5):搞懂生成器和yield機制Python
- python函數語言程式設計之yield表示式形式Python函數程式設計
- yield全面總結
- generator yield-delegation
- Python range() 函式用法Python函式
- python-random的用法Pythonrandom
- python中return的用法Python
- Python下劃線用法Python
- Python self用法詳解Python
- python BeautifulSoup用法介紹Python
- python中的eval用法Python
- Python with 語句的用法Python
- Python中if的基本用法Python
- Python中下劃線用法Python
- Python排序函式用法Python排序函式
- 成為Python大牛必須要掌握的高階語法——yieldPython
- 【-Flutter/Dart 語法補遺-】 sync* 和 async* 、yield 和yield* 、async 和 awaitFlutterDartAI
- Python中return self的用法Python