python -yield理解
生活随笔
收集整理的這篇文章主要介紹了
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理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [工具向]__androidstudio
- 下一篇: [debian]use ISO as d