Python 异步之推导式示例详解
目录
- 引言
- 1. 什么是异步推导式
- 2. 推导式
- 3. 异步推导式
- 4. Await 推导式
引言
当我们想到“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() 并发执行它们不同,而且可能更慢。
以上就是Python 异步之推导式示例详解的详细内容,更多关于Python 异步推导式的资料请关注我们其它相关文章!
相关推荐
-
如何使用Python异步之上下文管理器
目录 正文 1. 什么是异步上下文管理器 1.1. Context Manager 1.2. Asynchronous Context Manager 2. 如何使用异步上下文管理器 2.1. 定义 2.2. 使用 3. 异步上下文管理器和“异步”示例 正文 上下文管理器是一种 Python 构造,它提供了一个类似 try-finally 的环境,具有一致的接口和方便的语法,例如通过“with”表达. 它通常与资源一起使用,确保在我们完成资源后始终关闭或释放资源,无论资源的使用是成功还是因异常而
-
Python 异步如何使用等待有时间限制协程
目录 正文 1. 什么是 Asyncio wait_for() 2. 如何使用 Asyncio wait_for() 3. 带有超时的 Asyncio wait_for() 示例 正文 我们可以使用 asyncio.wait_for() 函数等待 asyncio 任务或协程超时完成.如果在任务完成之前超时已过,任务将被取消. 1. 什么是 Asyncio wait_for() asyncio.wait_for() 函数允许调用者等待 asyncio 任务或协程超时完成.如果没有指定超时,wait
-
Python 异步之如何获取当前和正在运行任务详解
目录 正文 1. 如何获取当前任务 2. 如何获取所有任务 正文 我们可以反省在 asyncio 事件循环中运行的任务.这可以通过为当前运行的任务和所有正在运行的任务获取一个 asyncio.Task 对象来实现. 1. 如何获取当前任务 我们可以通过 asyncio.current_task() 函数获取当前任务.此函数将为当前正在运行的任务返回一个任务对象. ... # get the current task task = asyncio.current_task() 传递给 asynci
-
Python异步之迭代器如何使用详解
目录 正文 1. 什么是异步迭代器 1.1. Iterators 1.2. Asynchronous Iterators 2. 什么是“async for”循环? 3. 如何使用异步迭代器 4. 异步迭代器示例 正文 迭代是 Python 中的基本操作.我们可以迭代列表.字符串和所有其他结构. Asyncio 允许我们开发异步迭代器.我们可以通过定义一个实现 aiter() 和 anext() 方法的对象来在 asyncio 程序中创建和使用异步迭代器. 1. 什么是异步迭代器 异步迭代器是一个
-
Python 异步之在 Asyncio中如何运行阻塞任务详解
目录 正文 1. 阻塞任务 2. 如何运行阻塞任务 3. 实例 正文 阻塞任务是阻止当前线程继续进行的任务. 如果在 asyncio 程序中执行阻塞任务,它会停止整个事件循环,从而阻止任何其他协程继续进行. 我们可以通过 asyncio.to_thread() 和 loop.run_in_executor() 函数在 asyncio 程序中异步运行阻塞调用. 1. 阻塞任务 asyncio的重点是异步编程和非阻塞IO.然而,我们经常需要在 asyncio 应用程序中执行阻塞函数调用. 这可能有很
-
Python 异步之生成器示例详解
目录 正文 1. 什么是异步生成器 1.1. Generators 1.2. Asynchronous Generators 2. 如何使用异步生成器 2.1. 定义 2.2. 创建 2.3. 一步 2.4. 遍历 3. 异步生成器示例 正文 生成器是 Python 的基本组成部分.生成器是一个至少有一个“yield”表达式的函数.它们是可以暂停和恢复的函数,就像协程一样. 实际上,Python 协程是 Python 生成器的扩展.Asyncio 允许我们开发异步生成器.我们可以通过定义一个使用
-
Python 异步等待任务集合
目录 正文 1. 什么是 asyncio.wait() 2. 如何使用 asyncio.wait() 3. 等待所有任务的示例 正文 我们可以通过 asyncio.wait() 函数等待异步任务完成.可以等待不同的条件,例如所有任务完成.第一个任务完成以及第一个任务因异常而失败. 让我们仔细看看. 1. 什么是 asyncio.wait() asyncio.wait() 函数可用于等待一组异步任务完成.回想一下,asyncio 任务是包装协程的 asyncio.Task 类的一个实例.它允许独立
-
Python 异步之推导式示例详解
目录 引言 1. 什么是异步推导式 2. 推导式 3. 异步推导式 4. Await 推导式 引言 当我们想到“pythonic”时,理解,如列表和字典理解是 Python 的一个特性. 这是我们执行循环的一种方式,与许多其他语言不同. Asyncio 允许我们使用异步推导式. 我们可以通过“async for”表达式使用异步推导式来遍历异步生成器和异步迭代器. 1. 什么是异步推导式 异步推导式是经典推导式的异步版本.Asyncio 支持两种类型的异步推导式,它们是“async for”推导式
-
python编程中简洁优雅的推导式示例详解
目录 1. 列表推导式 增加条件语句 多重循环 更多用法 2. 字典推导式 3. 集合推导式 4. 元组推导式 Python语言有一种独特的推导式语法,相当于语法糖的存在,可以帮助你在某些场合写出较为精简酷炫的代码.但没有它,也不会有太多影响.Python语言有几种不同类型的推导式. 1. 列表推导式 列表推导式是一种快速生成列表的方式.其形式是用方括号括起来的一段语句,如下例子所示: lis = [x * x for x in range(1, 10)] print(lis) 输出 [1, 4
-
Python简洁优雅的推导式示例详解
前言 推导式是从一个或者多个迭代器快速创建序列的一种方法.它可以将循环和条件判断结合,从而避免冗长的代码.推导式是典型的 Python 风格 Python语言有一种独特的推导式语法,相当于语法糖的存在,可以帮助你在某些场合写出较为精简酷炫的代码.但没有它,也不会有太多影响.Python语言有几种不同类型的推导式. 1. 列表推导式 列表推导式是一种快速生成列表的方式.其形式是用方括号括起来的一段语句,如下例子所示: lis = [x * x for x in range(1, 10)] prin
-
Python中的推导式使用详解
推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,速度快等优点.推导式包括: 1.列表推导式 2.字典推导式 3.集合推导式 嵌套列表推导式 NOTE: 字典和集合推导是最近才加入到Python的(Python 2.7 和Python 3.1以上版). 下面简要介绍下: [列表推导式] 列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形 其基本格式如下: 复制代码 代码如下: [expr for value in collection ifcondi
-
Python制作可视化报表的示例详解
大家好,我是小F- 在数据展示中使用图表来分享自己的见解,是个非常常见的方法. 这也是Tableau.Power BI这类商业智能仪表盘持续流行的原因之一,这些工具为数据提供了精美的图形解释. 当然了,这些工具也有着不少缺点,比如不够灵活,无法让你自己创建设计. 当你对图表展示要求定制化时,编程也许就比较适合你,比如Echarts.D3.js. 今天小F给大家介绍一个用Python制作可视化报表的案例,主要是使用到Dash+Tailwindcss. 可视化报表效果如下,水果销售情况一览~ Das
-
python实现PCA降维的示例详解
概述 本文主要介绍一种降维方法,PCA(Principal Component Analysis,主成分分析).降维致力于解决三类问题. 1. 降维可以缓解维度灾难问题: 2. 降维可以在压缩数据的同时让信息损失最小化: 3. 理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解. PCA简介 在理解特征提取与处理时,涉及高维特征向量的问题往往容易陷入维度灾难.随着数据集维度的增加,算法学习需要的样本数量呈指数级增加.有些应用中,遇到这样的大数据是非常不利的,而且从大数据集中学习
-
Python线性点运算数字图像处理示例详解
目录 点运算 定义 分类 线性点运算 分段线性点运算 非线性点运算 对数变换 幂次变换 点运算 定义 分类 线性点运算 例子: 分段线性点运算 非线性点运算 对数变换 幂次变换 1. 点运算是否会改变图像内像素点之间的空间位置关系? 点运算是一种像素的逐点运算,它与相邻的像素之间没有运算关系,点运算不会改变图像内像素点之间的空间位置关系. 2. 对图像灰度的拉伸,非线性拉伸与分段线性拉伸的区别? 非线性拉伸不是通过在不同灰度值区间选择不同的线性方程来实现对不同灰度值区间的扩展与压缩,而是在整个灰
-
Python面向对象编程repr方法示例详解
目录 为什么要讲 __repr__ 重写 __repr__ 方法 str() 和 repr() 的区别 为什么要讲 __repr__ 在 Python 中,直接 print 一个实例对象,默认是输出这个对象由哪个类创建的对象,以及在内存中的地址(十六进制表示) 假设在开发调试过程中,希望使用 print 实例对象时,输出自定义内容,就可以用 __repr__ 方法了 或者通过 repr() 调用对象也会返回 __repr__ 方法返回的值 是不是似曾相识....没错..和 __str__ 一样的
-
python函数传参意义示例详解
目录 C++这样的语言用多了之后,在Python函数传递参数的时候,经常会遇到一个问题,我要传递一个引用怎么办? 比如我们想要传一个x到函数中做个运算改变x的值: def change(y): y += 1 x = 1 print ("before change:", x) change(x) print ("after change: ", x) 得到的结果是 before change: 1 after change: 1 完全没用~~~这是怎么回事? 我来说
随机推荐
- 在Ubuntu中安装Postgresql数据库的步骤详解
- 数据库 三范式最简单最易记的解释
- Extjs入门之动态加载树代码
- JavaScript数据结构之二叉树的删除算法示例
- 使用ASP.NET.4.5.1+MVC5.0 搭建一个包含 Ninject框架 项目
- BootStrap selectpicker
- 经典算法:基数排序的小例子
- PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
- php number_format() 函数通过千位分组来格式化数字的实现代码
- c语言中malloc、realloc与calloc 的区别以及联系
- PHP学习笔记 IIS7下安装配置php环境
- SQL Server全文索引服务
- android实现蓝牙文件发送的实例代码,支持多种机型
- 关于Java中修饰符的总结(fina除外)
- java 桥模式(Bridge Pattern)详解
- 安卓(Android)实现3DTouch效果
- 扬州今明网络为提供50M免费html+FTP空间服务
- Android开发中日期工具类DateUtil完整实例
- Go语言中slice作为参数传递时遇到的一些“坑”
- vue-cli项目中使用Mockjs详解