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配置与使用OpenCV踩的一些坑
Apr 02 Python
Python变量赋值的秘密分享
Apr 03 Python
pandas中去除指定字符的实例
May 18 Python
Python pymongo模块常用操作分析
Sep 01 Python
详解python Todo清单实战
Nov 01 Python
python实现生成字符串大小写字母和数字的各种组合
Jan 01 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
Django后台管理系统的图文使用教学
Jan 20 Python
python手写均值滤波
Feb 19 Python
python如何更新包
Jun 11 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 02 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
数据库的日期格式转换
2006/10/09 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
基于jQuery的history历史记录插件
2010/12/11 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
Python中bisect的使用方法
2019/12/31 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
毕业证丢失证明
2014/01/15 职场文书
音乐专业自荐信
2014/02/07 职场文书
装配出错检讨书
2014/09/23 职场文书
西游记读书笔记
2015/06/25 职场文书
污染环境建议书
2015/09/14 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
配置nginx 重定向到系统维护页面
2021/06/08 Servers
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js