async for
和async with
的目的是什么?我知道这些语句有PEPs,但它们显然是为语言设计者而非普通用户设计的。希望您能提供高层次的理由并辅以示例。我自己做了一些研究,并找到了此答案:
作者没有给出打破链的示例,所以我还是有些困惑。此外,我注意到Python有
async for
和async with
语句是必需的,因为你会用裸的for
和with
语句打破yield from/await
链。
async for
和async with
,但没有async while
和async try ... except
。这听起来很奇怪,因为for
和with
只是while
和try ... except
的语法糖。我的意思是,后者语句的async
版本难道不会更灵活吗,因为它们是前者的构建块吗?还有一个答案讨论了
async for
,但只涉及它的用途是什么不是,并没有详细说明它的作用。作为额外的福利,async for
和async with
是语法糖吗?如果是,它们的冗长等效形式是什么?
for
和with
只是while
和try ... except
的语法糖”——不,远非如此,它们各自都有其独特之处。 - decezewith
语句“在语义上等同于”try...except...finally
。而你可以很容易地使用while
和next
实现for
循环。也许它们不是语法糖,但它们也不是那么不同。 - nalzokwith
/for
语句隐式调用,那么在异步__enter__
/__exit__
/__iter__
/__next__
中放置await
的其他地方在哪里呢? - decezefor
和with
封装了涉及特定方法的特定模式的协议,你可以用while
和try..except..finally
手动复制。但关键在于使这些模式可重用,而不是每次编写大量样板文件。由于异步版本的样板文件不同,因此您需要它们的特定async
版本。 - deceze