Python 3.8新特征之asyncio REPL
作者:小明明S À DOMICILE 发布时间:2023-10-08 02:59:58
前言
我最近都在写一些Python 3.8的新功能介绍的文章,在自己的项目中也在提前体验新的Python版本。为什么我对这个Python 3.8这么有兴趣呢?主要是因为在Python 2停止官方维护的2020年来临之前,Python 3.8是最后一个大版本,虽然还没有公布Python 3.9的发布时间表,但是按过去的经验,我觉得至少等Python 3.8.4发布之后才可能发布Python 3.9.0,那会应该已经在2020年年末了。所以大家最近2年的话题都会是Python 3.8。本周五(2019-05-31)将发布3.8.0 beta 1,这几天开发者们都在抓紧时间合并代码赶上Python 3.8最后一班车。这几天我将陆续分享几个新合并的特性。今天先说 asyncio REPL
REPL
REPL是 Read-Eval-Print Loop 的缩写,是一种简单的,交互式的编程环境:
Read。获得用户输入
Eval。对输入求值
Print。打印,输出求值的结果
Loop。循环,可以不断的重复Read-Eval-Print
REPL对于学习一门新的编程语言非常有帮助,你可以再这个交互环境里面通过输出快速验证你的理解是不是正确。CPython自带了一个这样的编程环境:
python
Python 3.7.1 (default, Dec 13 2018, 22:28:16)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def a():
... return 'A'
...
>>> a()
'A'
不过官方自带的这个环境功能非常有限,有经验的Python开发者通常会使用IPython,我写的大部分文章里面的代码都在IPython里面执行的, 而且IPython从 7.0开始支持了Async REPL:
ipython
defPython 3.7.1 (default, Dec 13 2018, 22:28:16)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: def a():
...: return 'A'
...:
In [2]: a()
Out[2]: 'A'
In [3]: import asyncio
In [4]: async def b():
...: await asyncio.sleep(1)
...: return 'B'
...:
In [5]: await b()
Out[5]: 'B'
In [6]: asyncio.run(b())
Out[6]: 'B'
简单地说,就是在IPython里面可以直接使用await,而不必用 asyncio.run(b()) 。这个在官方REPL里面是不行的:
python
Python 3.7.1 (default, Dec 13 2018, 22:28:16)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio
>>> async def b():
... await asyncio.sleep(1)
... return 'B'
...
>>> await b()
File "<stdin>", line 1
SyntaxError: 'await' outside function
是的,await只能在异步函数里面才可以使用。
Python 3.8的asyncio REPL
好消息是官方REPL也与时俱进,支持asyncio REPL了。具体细节可以看延伸阅读链接1:
./python.exe -m asyncio
asyncio REPL 3.8.0a4+ (heads/master:8cd5165ba0, May 27 2019, 22:28:15)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Use "await" directly instead of "asyncio.run()".
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio
>>> async def b():
... await asyncio.sleep(1)
... return 'B'
...
>>> await b()
'B'
>>> async def c():
... await asyncio.sleep(1)
... return 'C'
...
>>> task = asyncio.create_task(c())
>>> await task
'C'
>>> await asyncio.sleep(1)
注意激活REPL不是直接输入python,而是要用 python -m asyncio ,另外那个 import asyncio 是激活REPL时自动帮你输入的。
延伸阅读
先别看代码,看看你能不能实现这个功能 :yum:
https://github.com/python/cpython/pull/13472
总结
以上所述是小编给大家介绍的Python 3.8新特征之asyncio REPL,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.dongwm.com/post/144/


猜你喜欢
- 好多同志对 iframe 是如何控制的,并不是十分了解,基本上还处于一个模糊的认识状态.注意两个事项,ifr 是一个以存在的 iframe
- 本文实例讲述了php实现转换html格式为文本格式的方法。分享给大家供大家参考,具体如下:有时候需要转换html格式的字符串为文本,但又需要
- 我们今天就来看一下PHP 7正式版的算法和 wordpress 应用在其上的性能表现。PHP7 的安装,真是非常地向下兼容,下载,解压,把之
- 下面的文章主要描述的是如何正确通过rpm包安装、对MySQL进行配置与卸载,以下就有详细内容对配置MySQL与卸载MySQL(和PHP搭配之
- 本文实例讲述了Python生成器定义与简单用法。分享给大家供大家参考,具体如下:一、什么是生成器在Python中,由于受到内存的限制,列表容
- 需求:从服务器拷贝照片到本地,然后再从本地照片筛选照片。问题:从服务器拷贝到照片本地,太慢,速度只有20~30K,不能忍。然后想到,利用py
- 最近做项目需要我们前端对金额进行千分位格式化(也就是说每三位用逗号隔开),代码已经做了修改 之前的版本是本人疏忽 真对不住大家了
- replace 方法返回根据正则表达式进行文字替换后的字符串的复制。stringObj.replace(rgExp, replaceText
- 基于python opencv人脸识别的签到系统前言先看下效果实现的功能开始准备页面的构建功能实现代码部分总结前言一个基于opencv人脸识
- 对于英文文本分句比较简单,只要根据终结符"."划分就好,中文文本分句看似很简单,但是实现时会遇到很多麻烦,尤其是处理社交
- 不过先前的 调用方法着实有些繁琐,先实例化->添加参数、变量->写入,搞的跟把大象装冰箱里头一样麻烦。好在作者终于注意到这一点,
- 可是,其体积仍然很庞大。所以,在日常工作中,如何给SQL Server的备份文件瘦身,就是很多数据库管理员所关心的问题了。 也许微软的数据库
- 1,前端样式2,html代码{% load asset_filter %}<div class="col-sm-2"
- 上一篇我们写了怎么将xmind转换成想要的excel格式,这篇再讲一下用Python自带的tkinter库设计一个简单的gui界面,让我们的
- 在用csv.writer写入文件的时候发现中间有多余的空行。最早打开方式只是‘w',会出现多余的空行,网上建议使用binary形式‘
- 实例的背景说明假定一个个人信息系统,需要记录系统中各个人的故乡、居住地、以及到过的城市。数据库设计如下:Models.py 内容如下:&nb
- 由于在遭遇到这个页面之前我们一 * 互刚好在讨论交互设计原则之类的话题,其中有一条是:包容性,即满足主体用户需求的同时,尽可能兼顾非主体用户需
- 在 Python 整型对象所存储的位置是不同的, 有一些是一直存储在某个存储里面, 而其它的, 则在使用时开辟出空间.说这句话的理由, 可以
- 本文实例为大家分享了微信小程序实现多文件或者图片上传的具体代码,供大家参考,具体内容如下html<view class="l
- 例如:from multiprocessing import Pooldef f(x):return x*xpool = Pool(proc