關於yield的騷操作

2021-08-08 01:15:39 字數 1215 閱讀 3267

yield的可以定義迭代物件的返回值,可以看做類似於註解一類的標識

當滿足出發條件時,即呼叫__next__()方法時,自動呼叫yield修飾的值,並進行返回

def mrange(start=0,end,step=1):

while start < end:

yield start

start += 1

利用yield進行返回的值,必定是乙個迭代物件

同時,作為乙個返回值的方法,yield不僅可以返回內部定義修飾的值,也可以傳入引數,從外部定義返回的值

def get():

while true:

receive = yield

print('receive is {}'.format(receive))

首先,通過__next__()觸發,執行yield的傳值功能

然後外部呼叫send()方法進行yield返回值的傳入,就可以通過外部傳入影響內部的操作

藉由yield,通過__next__()的啟用,send()的傳入就可以在後面的語句中進行操作,實現生產者send(),消費者模式

簡單的實現一種非同步的操作

a = get()

a.__next__()

a.send('ok')

注意:

1)yield包含了返回的意思,所以不能return yield

2)函式返回後,操作就會結束,所以利用這種方法不能進行返回,並且操作要定義在while true中

3)這種方法下,只會在程式步驟中阻塞,語句執行完畢,即使是while true中,程式也會結束,可以多次的__next__()和send(),但是語句執行完畢,不再操作時,函式會自動退出,不會一直阻塞

def get(name):

while true:

receive = yield

print('name:{}\treceive is {}'.format(name, receive))

a = get('a')

a.__next__()

b = get('b')

b.__next__()

for value in range(10):

a.send(value)

b.send(value)

關於js型別轉換騷操作

js身為一種弱型別的語言,不用像c語言那樣要定義int float double string等等資料型別,因為允許變數型別的隱式轉換和允許強制型別轉換。我們在定義乙個變數的時候,就乙個var let const搞定,不用擔心資料的型別。比如常見的字串拼接,用 號可以實現變數和字串的拼接。總的來說,...

mysql騷操作 Mysql騷操作 優化大分頁查詢

系統結構如上圖。經過排查是因為系統b拉取資料時間太長導致的推送超時。系統b拉取資料的方法是根據 tiemstamp 資料操作時間 分頁查詢系統a的介面,即 1select?欄位名2from?表名3where?timestamp?begintime?and?timestamp?endtime?4lim...

string的騷操作

炒雞簡單的題目,大牛們都不看在眼裡的,怪我哦!輸入一行數字,如果我們把這行數字中的 5 都看成空格,那麼就得到一行用空格分割的若干非負整數 可能有些整數以 0 開頭,這些頭部的 0 應該被忽略掉,除非這個整數就是由若干個 0 組成的,這時這個整數就是0 你的任務是 對這些分割得到的整數,依從小到大的...