日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python -yield理解

發布時間:2025/6/17 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python -yield理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:https://foofish.net/iterators-vs-generators.html

從網上看到一個面試題,求最后的輸出結果:

def add(n, i):
return n+i
def test():
for i in range(4):
yield i
g = test()

for n in [1, 10, 5]:
g=(add(n, i) for i in g)
print(list(g))

輸出結果:
[1, 2, 3, 4]
[]
[]
list數據類型強轉也可以讀取生成器的值,第一次循環n=1的時候 生成器g已經被讀取了一遍,所以后面
# n =10,n=5的時候生成器不能再被讀取 就出現了空的list []
? t = test()
for n in [1, 10, 5]:
t = (add(n, i) for i in t)
print(list(t))
輸出結果:
[15, 16, 17, 18]
n=1, t = (add(n, i) for i in t) 若取生成器值應為[1,2,3,4]
n=10, t = (add(n, i) for i in (add(n, i) for i in t)),若取值應為[20,21,22,23]
n=5, t=(add(n, i) for i in (add(n, i) for i in (add(n, i) for i in t))),若取值[15, 16, 17, 18]


test()因為函數里面沒有return,而是yield 生成器對象,表示test()是一個生成器,g=test()并不會立即執行,
只有當它被隱示或者顯示的調用next時才能真正執行test()里面的代碼;
生成器的值只能被讀取一次;



注意:以上均是自己的個人理解,有問題請指教。






轉載于:https://www.cnblogs.com/t-ae/p/10743217.html

總結

以上是生活随笔為你收集整理的python -yield理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。