首页 > 编程语言 >Python 异步: 异步推导式(18)

Python 异步: 异步推导式(18)

时间:2023-03-15 23:22:52浏览次数:60  
标签:异步 迭代 推导 Python 18 列表 async 等待

动动发财的小手,点个赞吧!

当我们想到“pythonic”时,理解,如列表和字典理解是 Python 的一个特性。

这是我们执行循环的一种方式,与许多其他语言不同。

Asyncio 允许我们使用异步推导式。

我们可以通过“async for”表达式使用异步推导式来遍历异步生成器和异步迭代器。

1. 什么是异步推导式

异步推导式是经典推导式的异步版本。Asyncio 支持两种类型的异步推导式,它们是“async for”推导式和“await”推导式。

在我们看每之前,让我们首先回顾一下经典的推导式。

2. 推导式

推导式允许以简洁的方式创建列表、字典和集合等数据集合。列表推导式允许从新列表表达式中的 for 表达式创建列表。

...
# create a list using a list comprehension
result = [a*2 for a in range(100)]

还支持推导式来创建字典和集合。

...
# create a dict using a comprehension
result = {a:i for a,i in zip(['a','b','c'],range(3))}
# create a set using a comprehension
result = {a for a in [1, 2, 3, 2, 3, 1, 5, 4]}

3. 异步推导式

异步推导式允许使用带有异步可迭代对象的“async for”表达式来创建列表、集合或字典。

...
# async list comprehension with an async iterator
result = [a async for a in aiterable]

这将根据需要创建和安排协程或任务,并将其结果放入列表中。

回想一下,“async for”表达式只能在协程和任务中使用。

另外,回想一下异步迭代器是一个产生可等待对象的迭代器。

“async for”表达式允许调用者遍历等待对象的异步迭代器并从每个对象中检索结果。

在内部,async for 循环将根据需要自动解析或等待每个可等待的调度协程。

异步生成器自动实现异步迭代器的方法,也可用于异步推导式。

...
# async list comprehension with an async generator
result = [a async for a in agenerator]

4. Await 推导式

“等待”表达式也可以在列表、集合或字典理解中使用,称为等待推导式。

与异步推导式一样,它只能在异步协程或任务中使用。

这允许通过挂起和等待一系列可等待对象来创建数据结构,如列表。

...
# await list compression with a collection of awaitables
results = [await a for a in awaitables]

这将通过依次等待每个可等待对象来创建结果列表。

当前协程将被挂起以顺序执行可等待对象,这与使用 asyncio.gather() 并发执行它们不同,而且可能更慢。

本文由mdnice多平台发布

标签:异步,迭代,推导,Python,18,列表,async,等待
From: https://www.cnblogs.com/swindler/p/17220641.html

相关文章

  • Python Flask JinJa2 语法介绍与示例讲解
    目录一、概述二、JinJa2语法介绍与示例讲解1)变量2)控制结构3)循环结构4)宏5)过滤器6)继承7)包含一、概述Flask是一个轻量级的PythonWeb框架,支持Jinja2模板引擎。Jinja2是一个......
  • 【小哥132】显示与隐藏网络名-Z-Copy命令使用-导入网表-放置封装-添加Mark点与非电气
    走线,焊盘,动态铜皮显示网络名称。静态铜皮与过孔不能显示网络名称  Z-copy复制一个RouterKeepin区域(允许布线)内缩20mil,拼板与使用过程不会损坏到线Z-copy命令使用,......
  • 基于python实现的抓取腾讯视频所有电影的爬虫
    我搜集了国内10几个电影网站的数据,里面近几十W条记录,用文本没法存,mongodb学习成本非常低,安装、下载、运行起来不会花你5分钟时间。#-*-coding:utf-8-*-importreimport......
  • python应用题 字符填充
    提示代码#请在_______完善代码s=input()print("{_______(1)_________}".format(_______(2)_________))......
  • python爬虫案列08:梨视频爬取一个短视频
    importrequestsfromlxmlimportetreeimportos#拿到视频地址urlurl='https://www.pearvideo.com/video_1160135'#提取url中的cont_id,后面用cont_id=url.sp......
  • Vue.js 计算属性(p18~p20)
    视频18视频19视频20姓名案例_插值语法实现<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"/> <title>姓名案例_插值语法实现</title> <!--引入Vue-->......
  • python应用题 两点间距离
    提示代码:#请在______处使用一行代码或表达式替换##注意:请不要修改其他已给出代码ntxt=input("")______x1=eval(nls[0])y1=eval(nls[1])x2=eval(nls[2])y2=eval(nls[......
  • python应用题 计算球体表面积和体积
    提示代码:#请在_____完善一行代码PI=3.14r=eval(input())S=______#球体表面积V=______#球体体积print("______".format(S,V))......
  • python库下载方法
    1、pipinstallflash2、pip3install-rrequirements.txt 3、pip3install-rrequirements.txt-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com......
  • Python&Pandas学习笔记
    df.locAccessagroupofrowsandcolumnsbylabel(s)orabooleanarray.只能通过标签和布尔值来索取数据df.loc[]与df.iloc[[]]的区别:[]返回一个Series,[[]]......