一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

Python 支持同步的推導(dǎo)式版本

科技綠洲 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-31 14:37 ? 次閱讀

PEP-492 和 PEP-525 通過(guò) async/await 語(yǔ)法,引入了對(duì)原生協(xié)程和異步生成器的支持。本 pep 提議給列表、集合、字典解析式和生成器表達(dá)式添加異步的版本。

基本原理和目標(biāo)

Python 廣泛地支持同步的推導(dǎo)式,允許使用簡(jiǎn)單而簡(jiǎn)潔的語(yǔ)法生成列表、字典和集合。我們提議為異步代碼實(shí)現(xiàn)類似的語(yǔ)法結(jié)構(gòu)。

為了說(shuō)明可讀性的改善,請(qǐng)考慮下面的例子:

result = []
async for i in aiter():
    if i % 2:
        result.append(i)

有了提議的異步解析式語(yǔ)法,上面的代碼會(huì)變得非常簡(jiǎn)短:

result = [i async for i in aiter() if i % 2]

本 PEP 也使得在各種解析式中使用 await 表達(dá)式成為可能:

result = [await fun() for fun in funcs]

規(guī)范

異步的解析式

我們提議允許在列表、集合與字典解析式中使用 async。待 PEP-525 被批準(zhǔn)之后,我們還可以創(chuàng)建異步的生成器表達(dá)式。

例子:

  • 集合解析式:{i async for i in agen()}
  • 列表解析式:[i async for i in agen()]
  • 字典解析式:{i: i ** 2 async for i in agen()}
  • 生成器表達(dá)式:(i ** 2 async for i in agen())

允許在異步解析式和生成器表達(dá)式中使用 async for 與 if 以及 for 子句:

dataset = {data for line in aiter()
                async for data in line
                if check(data)}
data = {data for line in aiter() async for data in line if check(data)}

異步解析式只允許在“async def”函數(shù)中使用。

原則上,異步生成器表達(dá)式允許用在任何上下文中。然而,在 Python 3.6 中,由于 async 和 await 只是“軟關(guān)鍵字”(soft-keyword),異步生成器表達(dá)式只允許在 async def 函數(shù)中使用。一旦 async 和 await 在 Python 3.7 中成為保留關(guān)鍵字,這個(gè)限制將被移除。

解析式中的 await

我們提議允許在異步和同步解析式中使用 await 表達(dá)式:

result = [await fun() for fun in funcs]
result = {await fun() for fun in funcs}
result = {fun: await fun() for fun in funcs}

result = [await fun() for fun in funcs if await smth]
result = {await fun() for fun in funcs if await smth}
result = {fun: await fun() for fun in funcs if await smth}

result = [await fun() async for fun in funcs]
result = {await fun() async for fun in funcs}
result = {fun: await fun() async for fun in funcs}

result = [await fun() async for fun in funcs if await smth]
result = {await fun() async for fun in funcs if await smth}
result = {fun: await fun() async for fun in funcs if await smth}

這只在 async def 函數(shù)體中有效。

語(yǔ)法的更新

本提議需要在語(yǔ)法層面做一個(gè)修改:在 comp_for 中添加可選的“async”關(guān)鍵字:

comp_for: [ASYNC] 'for' exprlist 'in' or_test [comp_iter]

解析式的 AST 節(jié)點(diǎn)將有一個(gè)新的 is_async 參數(shù)。

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

    關(guān)注

    3

    文章

    4365

    瀏覽量

    63910
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4882

    瀏覽量

    70050
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    322

    瀏覽量

    21575
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4822

    瀏覽量

    85896
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Python哪個(gè)版本好用?

    想學(xué)習(xí)Python的人都會(huì)有一個(gè)困惑,那就是Python目前有兩個(gè)版本Python2和Python3,P
    發(fā)表于 01-26 16:39

    Python版本兼容性處理方法

    Python目前有兩個(gè)主版本并存,這很讓人苦惱。雖然Python 3有許多優(yōu)于Python 2的特性,但是Python 2的生態(tài)系統(tǒng)更為完善
    發(fā)表于 04-28 15:42

    開(kāi)發(fā)者福音!谷歌云APP引擎開(kāi)始支持Python 3.7

    下方鏈接吧!https://cloud.google.com/appengine/docs/standard/python3/敲重點(diǎn)!—可支持便攜Web應(yīng)用程序了!App Engine的原始
    發(fā)表于 08-14 10:12

    請(qǐng)問(wèn)大佬有支持imx6ull的python3版本么?

    支持imx6ull的python3版本
    發(fā)表于 01-10 06:52

    python推導(dǎo)

    python推導(dǎo)推導(dǎo)(英文名:comprehensions),也叫解析,是
    發(fā)表于 02-28 17:14

    如何使用Python同步文件夾

    要?jiǎng)?chuàng)建可分發(fā)程序,您需要在自己的計(jì)算機(jī)上安裝python。電腦。不幸的是,我們將使用的模塊pyinstaller不適用于python 3.6,因此您需要在計(jì)算機(jī)上安裝python 3.5或更低
    的頭像 發(fā)表于 12-11 14:35 ?2863次閱讀

    Python3.9的第一個(gè)維護(hù)版本候選版本發(fā)布

    近期,Python 3.9的第一個(gè)維護(hù)版本候選版本發(fā)布。 IT之家獲悉,Python 3.9.1rc1 是 Python 編程語(yǔ)言最新的主要
    的頭像 發(fā)表于 12-08 09:22 ?1801次閱讀

    Logistic回歸數(shù)學(xué)推導(dǎo)以及python實(shí)現(xiàn)

    Logistic回歸數(shù)學(xué)推導(dǎo)以及python實(shí)現(xiàn)
    發(fā)表于 02-25 14:48 ?7次下載

    淺析同步與異步Python的區(qū)別與概述

    你是否聽(tīng)到人們說(shuō)過(guò),異步Python代碼比普通(或同步Python代碼更快?果真是那樣嗎?
    的頭像 發(fā)表于 04-25 13:53 ?2366次閱讀
    淺析<b class='flag-5'>同步</b>與異步<b class='flag-5'>Python</b>的區(qū)別與概述

    python推導(dǎo)是什么

    python推導(dǎo) 推導(dǎo)(英文名:comprehensions),也叫解析,是
    的頭像 發(fā)表于 02-28 17:13 ?3038次閱讀

    Python 3.11與之前Python 版本差異情況

    Python 3.11.0 正式版本預(yù)計(jì)于今年 10 月份發(fā)布,目前已發(fā)布了首個(gè)和第二個(gè) Beta 版本;預(yù)計(jì) Beta 階段將會(huì)發(fā)布 4 個(gè)版本,下一個(gè)預(yù)發(fā)布
    的頭像 發(fā)表于 07-22 10:51 ?5316次閱讀

    同步發(fā)電機(jī)互感系數(shù)推導(dǎo)

    同步發(fā)電機(jī)互感系數(shù)推導(dǎo)
    發(fā)表于 03-28 10:52 ?0次下載
    <b class='flag-5'>同步</b>發(fā)電機(jī)互感系數(shù)<b class='flag-5'>推導(dǎo)</b>

    Python和Anaconda的版本對(duì)應(yīng)關(guān)系

    原文鏈接 Python和Anaconda的版本對(duì)應(yīng)關(guān)系如下: Packages included in Anaconda 2022 . 10 for 64 -bit Linux on x 86
    的頭像 發(fā)表于 06-13 16:52 ?1408次閱讀
    <b class='flag-5'>Python</b>和Anaconda的<b class='flag-5'>版本</b>對(duì)應(yīng)關(guān)系

    python語(yǔ)言表推導(dǎo)和生成器表達(dá)式特性

    今天我想向你介紹python語(yǔ)言的兩個(gè)非常有用的特性:列表推導(dǎo)和生成器表達(dá)式。這兩個(gè)特性都可以讓你用一行簡(jiǎn)潔的代碼來(lái)創(chuàng)建一個(gè)序列,而不需要寫循環(huán)或者函數(shù)。但是它們之間也有一些重要的區(qū)別,我們一起
    的頭像 發(fā)表于 07-20 09:51 ?1055次閱讀
    <b class='flag-5'>python</b>語(yǔ)言表<b class='flag-5'>推導(dǎo)</b><b class='flag-5'>式</b>和生成器表達(dá)式特性

    windows7可以安裝python什么版本

    Python 3是新一代Python語(yǔ)言版本。它在語(yǔ)法和功能上與Python 2有一些不同。Python 3.x系列是目前主要
    的頭像 發(fā)表于 11-23 17:15 ?3.1w次閱讀