python 中 yield 的使用
python中yield在函數中的使用
正是因為函數含有這個yield,所以,該函數不再是普通的函數,而是生成器函數(generator function)。下面通過小例子來說明一下這個內置函數的特性:
1、直接運行函數并不會執行。
a = 0 def add_(initial, k):for i in range(k):initial = initial + 1print(initial)yield initial add_(a, 10)從運行結果發現,并沒有輸出initial的值,說明該函數并沒有直接調用執行。
2、直接打印該函數會返回一個生成器對象。
print(add_(a, 10)) <generator object add_ at 0x000002457504CBA0>3、可通過for循環迭代執行。
a = 0 def add_(initial, k):for i in range(k):initial = initial + 1print(initial)yield initial add_(a, 4) print(add_(a, 4)) for j in add_(a, 4):print('j:', j) <generator object add_ at 0x000002A92F81CBA0> 1 j: 1 2 j: 2 3 j: 3 4 j: 4Process finished with exit code 0從輸出結果可以得知,每次函數執行到yield函數時會終止函數的執行,并保留變量initial的值,通過for循環再次執行該函數時,會從上次執行到的地方跳過yield繼續執行。
總結:yield 的作用就是把一個函數變成一個 generator,帶有 yield 的函數不再是一個普通函數,Python 解釋器會將其視為一個 generator,調用 add_(a, 4)不會執行add_函數,而是返回一個 iterable 對象。在 for 循環執行時,每次循環都會執行 add_函數內部的代碼,執行到 yield initial?時,add_函數就返回一個指定變量的迭代值,在示例中,這個指定的變量為initial,下次迭代時,代碼從 yield initial的下一條語句繼續執行,而函數的本地變量看起來和上次中斷執行前是完全一樣的,于是函數繼續執行,直到再次遇到 yield。
該方法可用于for循環迭代獲取數據,為模型本身節省了內存空間與運算時間。
總結
以上是生活随笔為你收集整理的python 中 yield 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch数据加载时报错OSErro
- 下一篇: python+OpenCV检测条形码