iT邦幫忙

0

Python 超新手-next()

  • 分享至 

  • xImage

各位大大, 想請教一下為什麼以下
print(next(multi_yield()))和你print(next(multi_obj))結果會不一樣?謝謝??

def multi_yield():
yield_str = ‘first string’
yield yield_str
yield_str = ‘second string’
yield yield_str

multi_obj = multi_yield()
print(next(multi_obj))
#output: first string

print(next(multi_obj))
#output:second string

p rint(next(multi_yield()))
#output: first string
p rint(next(multi_yield()))
#output: second string

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2022-06-06 09:10:12
最佳解答

print(next(multi_yield()))和你print(next(multi_obj))結果會不一樣?謝謝??

把 yield 換成 return 即可明白
1.為什麼每次 print(next(multi_yield)) 都是 first_string
2.用 return 不叫 iterator,要用多個 yield 才能搭配 next 使用
3.print(next(multi_obj)) 的次數等於裡面寫 yield 的次數,超過的話就會出現訊息

既然「超新手」
我建議先不要學 yield
放在第二階段再來學

這篇是我覺得解釋 yield 的範例寫的最好的
裡面最重要是What are they good for?那段
如果你看不懂或者沒用到的話
就根本不必學 yield

2
I code so I am
iT邦高手 1 級 ‧ 2022-06-06 08:39:44

Generator 的正常作法是先建立一個物件:

multi_obj = multi_yield()

之後再使用next()取得下一個 yield 值:

next(multi_obj)

另一段程式,重複建立物件,當然,都取到第一個值:

next(multi_yield())

我要發表回答

立即登入回答