<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Python中有一個非常有用的語法叫做生成器,用到的關鍵字就是yield。yield的作用是把一個函數變成生成器(generator),起到一個延遲的作用。
帶有yield的函數在Python中被稱之為generator(生成器),也就是說,當你呼叫這個函數的時候,函數內部的程式碼並不立即執行 ,這個函數只是返回一個生成器(Generator Iterator)。
generator函數怎麼呼叫呢?答案是next函數。
def generator(): for i in range(10) : yield i*i gen = generator() print(gen) print("first iteration:") print(next(gen)) print("second iteration:") print(next(gen)) print("third iteration:") print(next(gen)) print("fourth iteration:") print(next(gen))
程式輸出:
<generator object generator at 0x7ffaad115aa0>first iteration:
0
second iteration:
1
three iteration:
4
four iteration:
9
在函數第一次呼叫next(gen)函數時,generator函數從開始執行到yield,並返回yield之後的值。
在函數第二次呼叫next(gen)函數時,generator函數從上一次yield結束的地方繼續執行,直至下一次執行到yield的地方,並返回yield之後的值。依次類推。
def generator(): x = 1 while True: y = (yield x) x += y gen = generator() print("first iteration:") print(next(gen)) print("send iteration:") print(gen.send(10))
程式碼輸出:
first iteration:
1
send iteration:
11
生成器(generator)函數用yield表示式將處理好的x傳送給生成器(Generator)的呼叫者;然後生成器(generator)的呼叫者可以通過send函數,將外部資訊替換生成器內部yield表示式的返回值,並賦值給y,並參與後續的迭代流程。
範例2:
def dog(name): food_list=[] print('狗哥%s準備開吃'%name) while True: food=yield food_list # 暫停food=yield='一桶泔水' print('狗哥%s吃了%s'%(name,food)) food_list.append(food) dog_name=dog('Ami') next(dog_name) dog_name.send('肉肉') dog_name.send('包子')
程式碼輸出:
狗哥Ami準備開吃
狗哥Ami吃了肉肉
狗哥Ami吃了包子
Python之所以要提供這樣的解決方案,主要是記憶體佔用和效能的考量。看類似下面的程式碼:
def my_range(start,stop,step=1): while start<stop: yield start #暫停 start += step g=my_range(1,30,2) #1 3 print('first iteration:') print(next(g)) print('scond iteration:') print(next(g)) print(next(g))
執行結果
first iteration
1
scond iteration
3
5
1、提供一種自定義迭代器的方式
2、可以節約記憶體空間
3、yield可以暫停住函數,返回值
4、yield可以返回值,同時可以賦值,如下:
yield 值
x=yield
x= yield 值
相同點:都是用在函數內,都可以返回值,沒有型別限制,沒有個數限制
不同點:return只能返回一次值,yield可以返回多次值
到此這篇關於Python中Yield的基本用法及Yield與return的區別的文章就介紹到這了,更多相關Python Yield與return的區別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45