python之yield深入理解及与await比较

1.yield深入理解

原文地址:https://www.cnblogs.com/coderzh/articles/1202040.html

2.yield和await比较

 await用于挂起阻塞的异步调用接口。器作用在一定程度上类似于yield。这仅仅是效果上一样(都能实现暂停的效果),但是功能上却不兼容。意思是你不能再生成器中使用await,也不能在async定义的协程函数中使用yield。

async/awaitPython 3.5引入的新语法,用于异步编程。使用async/await可以让我们更容易地编写异步代码。 async和await是两个关键字,其中async用于定义一个异步函数,await用于在异步函数中等待另一个异步函数的执行结果。 下面是一些关于async和await的用法和理解: 1. async定义一个异步函数 定义一个异步函数非常简单,只需要在函数定义前加上async关键字即可: ```python async def foo(): pass ``` 2. await等待另一个异步函数的执行结果 在一个异步函数中,我们通常会等待另一个异步函数的执行结果。这时候就可以使用await关键字来等待: ```python async def foo(): result = await bar() print(result) ``` 在上面的代码中,foo函数中的result变量会等待bar函数的执行结果。这里的bar函数也必须是一个异步函数。 3. 异步上下文管理器 除了可以等待异步函数的执行结果外,await还可以等待异步上下文管理器的执行结果。异步上下文管理器通常用于异步资源的管理,例如异步文件读写。 ```python async with open('file.txt') as f: content = await f.read() ``` 在上面的代码中,我们使用异步上下文管理器来打开一个文件并等待读取文件的内容。 4. asyncio模块 asyncio是Python中用于异步编程的标准库,它提供了一些常用的异步函数和工具函数,例如asyncio.sleep、asyncio.wait等等。 ```python import asyncio async def foo(): print('start') await asyncio.sleep(1) print('end') asyncio.run(foo()) ``` 在上面的代码中,我们使用asyncio.sleep来模拟一个耗时的异步操作。使用asyncio.run来运行foo函数。 5. 异步迭代器 异步迭代器是一种特殊的迭代器,它可以异步地生成数据。 ```python async def foo(): for i in range(10): yield i await asyncio.sleep(1) async for i in foo(): print(i) ``` 在上面的代码中,我们定义了一个异步生成器foo,它每隔1秒钟生成一个数字。使用async for循环来异步地迭代foo生成的数字。 总的来说,async/awaitPython中异步编程的重要特性,它可以让我们更容易地编写异步代码。虽然在使用时需要注意一些细节,但是掌握了async/await的用法和理解,就可以更加方便地使用Python进行异步编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值