看到一道題,return和yield有什麼區別,所以就連著print一起寫一下吧
print、return、yield都有列印的功能
首先看一下**以及輸出
def do_print():
for i in range(1, 5):
print(i)
print(do_print())
print("--------這是一條分割線---------")
def do_return():
for i in range(1, 5):
return i
print(do_return())
print("--------這是一條分割線---------")
def do_yield():
for i in range(1,5):
yield i
print(do_yield())
輸出如下:
123
4none
--------這是一條分割線---------
1--------這是一條分割線---------
print:
這個地方出了列印了1,2,3,4以外,為什麼後面還會列印乙個none?
是因為do_print()函式內部是預設存在乙個return的,只是不返回任何值,所以最後會返回乙個none
return:
只返回了1,就結束了遍歷迴圈,後面的2,3,4沒有機會返回
這個功能就類似迴圈中我們學到的break,程式執行到此便結束了,後面的不再執行
yield:
這個地方請注意,請執行以下**對yield進行更深入的了解:
print(type(do_yield()))
yi = do_yield()
for i in yi:
print(i)
輸出:
123
4
由此可見
1、yield的資料型別是generator,generator什麼意思,是指生成器
2、yield輸出1,2,3,4,那麼也就是說,yield並沒有阻斷迴圈的執行,他也是執行完所有的迴圈過程,最後通過迴圈列印出所有的值
綜上:
print需要注意:內部有乙個預設未展示的return,會列印出none
return會執行到這一步的時候中斷迴圈
yield則不會中斷迴圈,並且需要乙個新的迴圈列印返回值
*********************************************
延伸知識:
1、yield生成器不太明白,暫時擱下不講
2、yield和list的遍歷區別
從**程度上看,都是先執行乙個迴圈(do_yield()
),然後再執行乙個for i in yi:
列印出值
但是這個地方是有區別的
list列表,是先迴圈,然後將所有的值存進list中間,然後再將值乙個個取出,乙個個列印
yield,是執行一次do_yield()
迴圈,獲取乙個值,執行一次for i in yi:
列印獲取到的值
ps:上述可以通過debug進行驗證
由於這些值都是存放在記憶體中,list需要存放整個迴圈中的值,然後再列印出來
而yield是獲取到乙個列印乙個,那麼就會導致yield整體上占用的記憶體空間較小
Atitit 事件機制 與 訊息機制的聯絡與區別
atitit.事件機制 與 訊息機制的聯絡與區別 1 訊息 事件機制是幾乎所有開發語言都有的機制,在某些語言稱之為訊息 event 有些地方稱之為 message 12 發布 訂閱模式13 事件 是侵入式設計,霸佔你的主迴圈 訊息是非侵入式設計,將主迴圈該怎樣設計的自由留給使用者。13 1.事件越如...
《常用的機器學習演算法 SVM與LR的聯絡和區別》
上面那篇文章,簡單的總結了李航老師 統計機器學習 上面的svm的問題。其中軟間隔的svm主要指的是對那些線性不可分的樣本集構建svm分類的問題,允許一定的誤分類,所以優化問題引入了引數c 作為懲罰因子,c越大懲罰越大允許的錯誤越小。但是直接使用0 1損失函式的話其非凸 非連續,數學性質不好優化起來比...
LDO DCDC聯絡與區別
dcdc的意思是直流變 到 直流 不同直流電源值的轉換 只要符合這個定義都可以叫dcdc 轉換器,包括ldo。但是一般的說法是把直流變 到 直流由開關方式實現的器件叫dcdc。ldo是低壓降的意思,這有一段說明 低壓降 ldo 線性穩壓器的 成本低,噪音低,靜態電流小,這些是它的突出優點。它需要的外...