0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python語言之使用async關(guān)鍵字來定義函數(shù)

冬至配餃子 ? 來源:繆斯之子 ? 作者:肖新苗 ? 2022-08-24 11:12 ? 次閱讀

協(xié)程背景

早期的協(xié)程是用yield來實(shí)現(xiàn)的,但是代碼特別難懂, python3.5之后的版本, 使用 async 關(guān)鍵字來定義的函數(shù)。調(diào)用該函數(shù),會返回一個協(xié)程對象

async和yield對比

不同點(diǎn):

1.1 yield語法比較復(fù)雜,async語法簡單

yield:b=yield a,yield右邊的a是第一次的返回值,左邊的b是第二次執(zhí)行的輸入值,最后還有一個return是最后一次返回值

async:方法前面加async,做send參數(shù)時,只能傳None,代碼可讀性大大提高了, 開發(fā)者只需要關(guān)注傳參和返回值, 而不需要花額外精力去理解yield左右的變量

1.2 async只需要send一次就可以獲得返回值,yield要send2次

例子說明

分別用yield和async的方式, 實(shí)現(xiàn)協(xié)程


async def req1(param):
return param


def req2(param):
res = yield param
return res


def print_value(f, args):
try:
b = f.send(args)
except StopIteration as e:
print(f'{f.__name__}返回值 {e.value}')
return e.value
else:
print(f'{f.__name__}接收 ')
return b


g1 = req1(1)
print_value(g1, None)

g2 = req2(2)
res = print_value(g2, None)
print_value(g2, res)

'''
結(jié)果:
req1返回值 1
req2接收 2
req2返回值 2
'''


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61967
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84077
收藏 人收藏

    評論

    相關(guān)推薦

    快速掌握C語言關(guān)鍵字

    C語言中的32個關(guān)鍵字你知道多少個呢?根據(jù)關(guān)鍵字的作用分為四類:數(shù)據(jù)類型關(guān)鍵字、控制語句關(guān)鍵字、存儲類型
    的頭像 發(fā)表于 07-06 08:04 ?194次閱讀
    快速掌握C<b class='flag-5'>語言</b><b class='flag-5'>關(guān)鍵字</b>

    鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫異步并發(fā)async/await】

    async/await是一種用于處理異步操作的Promise語法糖,使得編寫異步代碼變得更加簡單和易讀。通過使用async關(guān)鍵字聲明一個函數(shù)為異步
    的頭像 發(fā)表于 04-02 20:57 ?716次閱讀
    鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫異步并發(fā)<b class='flag-5'>async</b>/await】

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫異步并發(fā)簡述async/await

    async/await是一種用于處理異步操作的Promise語法糖,使得編寫異步代碼變得更加簡單和易讀。通過使用async關(guān)鍵字聲明一個函數(shù)為異步
    發(fā)表于 03-06 14:44

    內(nèi)聯(lián)函數(shù)定義 為什么需要內(nèi)聯(lián)函數(shù)

    inline關(guān)鍵字是C99標(biāo)準(zhǔn)的型關(guān)鍵字,其作用是將函數(shù)展開,把函數(shù)的代碼復(fù)制到每一個調(diào)用處。
    的頭像 發(fā)表于 02-19 12:20 ?451次閱讀

    在NVM和本地\"內(nèi)存中定義數(shù)組(靜態(tài) /global /local)的\"關(guān)鍵字是什么?

    在 NVM 和本地\"內(nèi)存中定義數(shù)組(靜態(tài) /global /local)的\"關(guān)鍵字是什么? 還有與 32 位對齊的關(guān)鍵字怎么樣。
    發(fā)表于 01-25 07:52

    你還記得這個C語言關(guān)鍵字嗎?

    當(dāng)你使用volatile關(guān)鍵字時,你告訴編譯器該變量的值可能會在程序的執(zhí)行過程中被外部因素更改,因此編譯器不應(yīng)該對該變量的讀寫進(jìn)行優(yōu)化。下面是一些使用volatile的例子,以及對它們的一些文字描述
    的頭像 發(fā)表于 12-17 08:00 ?278次閱讀
    你還記得這個C<b class='flag-5'>語言</b><b class='flag-5'>關(guān)鍵字</b>嗎?

    vlookup提取關(guān)鍵字匹配多個結(jié)果

    是它能夠基于關(guān)鍵字匹配提取多個結(jié)果。 當(dāng)使用VLOOKUP提取多個結(jié)果時,需要遵循以下幾個重要步驟。首先,您需要確保數(shù)據(jù)的組織和結(jié)構(gòu)正確。數(shù)據(jù)應(yīng)以表格格式排列,左側(cè)為關(guān)鍵字列,右側(cè)為相應(yīng)的信息列。 首先,讓我們考慮一個實(shí)際的例子。假設(shè)您有一個大型數(shù)據(jù)集
    的頭像 發(fā)表于 12-01 10:40 ?1998次閱讀

    python函數(shù)返回多個參數(shù)

    。 在Python中,可以使用關(guān)鍵字 return 返回一個或多個值。在函數(shù)定義的末尾,可以使用 return 語句
    的頭像 發(fā)表于 11-21 16:37 ?930次閱讀

    python如何定義一個函數(shù)

    ()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。 二、定義一個函數(shù) 你可以定義一個由自己想
    的頭像 發(fā)表于 11-14 11:26 ?597次閱讀

    static關(guān)鍵字的三種用法

    變量(StaticVariables):在C語言中,使用`static`關(guān)鍵字聲明靜態(tài)變量是一種常見的用法,它具有以下主要作用:1.生存期延長:靜態(tài)變量的生存期在程序的整個運(yùn)行期間,而不僅僅是在聲明它的
    的頭像 發(fā)表于 11-10 08:00 ?416次閱讀
    static<b class='flag-5'>關(guān)鍵字</b>的三種用法

    IAR能否在整個工程中搜索關(guān)鍵字

    像mdk可以在整個工程中搜索關(guān)鍵字 IAR應(yīng)該也有類似的功能吧,但是我貌似沒有找到
    發(fā)表于 11-08 07:21

    在嵌入式中定義變量時volatile關(guān)鍵字的作用是什么?

    在嵌入式中定義變量時volatile關(guān)鍵字的作用?
    發(fā)表于 10-24 07:50

    程序中變量加volatile關(guān)鍵字是做什么用途的?

    為什么變量定義要加上這個關(guān)鍵字
    發(fā)表于 10-13 07:15

    this關(guān)鍵字在Java中的用法

    this 關(guān)鍵字只能在方法內(nèi)部使用,表示對“調(diào)用方法的那個對象”的引用。 其實(shí)簡單來說 this 關(guān)鍵字就是表示當(dāng)前對象,下面我們具體介紹 this 關(guān)鍵字在Java中的用法。 1、
    的頭像 發(fā)表于 10-10 16:49 ?459次閱讀
    this<b class='flag-5'>關(guān)鍵字</b>在Java中的用法

    python定義函數(shù)與調(diào)用函數(shù)的順序

    定義函數(shù)與調(diào)用函數(shù)的順序 函數(shù)定義后,本身是不會自動執(zhí)行的,只有在被調(diào)用后,函數(shù)才會被執(zhí)行,得
    的頭像 發(fā)表于 10-04 17:17 ?1036次閱讀