Python 3.8新特征之asyncio REPL


Posted in Python onMay 28, 2019

前言

我最近都在写一些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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python中实现对list做减法操作介绍
Jan 09 Python
Python yield 使用浅析
May 28 Python
Python实现周期性抓取网页内容的方法
Nov 04 Python
Python AES加密实例解析
Jan 18 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
Python 忽略warning的输出方法
Oct 18 Python
pycham查看程序执行的时间方法
Nov 29 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
May 16 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 Python
python中pivot()函数基础知识点
Jan 03 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 #Python
Python学习笔记之变量、自定义函数用法示例
May 28 #Python
Python分布式进程中你会遇到的问题解析
May 28 #Python
Python增强赋值和共享引用注意事项小结
May 28 #Python
Django框架用户注销功能实现方法分析
May 28 #Python
Django框架首页和登录页分离操作示例
May 28 #Python
Django框架封装外部函数示例
May 28 #Python
You might like
UCenter Home二次开发指南
2009/05/28 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
layer.confirm()右边按钮实现href的例子
2019/09/27 Javascript
在Python中增加和插入元素的示例
2018/11/01 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
Python自动抢红包教程详解
2019/06/11 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
Python循环结构的应用场景详解
2019/07/11 Python
Python实现名片管理系统
2020/02/14 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
python中time.ctime()实例用法
2021/02/03 Python
为什么要用EJB
2014/04/17 面试题
日语专业毕业生自荐信
2013/11/11 职场文书
求职信模板怎么做
2014/01/26 职场文书
大型会议策划方案
2014/05/17 职场文书
读群众路线的心得体会
2014/09/03 职场文书
2015年父亲节寄语
2015/03/23 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript