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求相邻数的方法示例
Aug 18 Python
Python及PyCharm下载与安装教程
Nov 18 Python
浅谈flask中的before_request与after_request
Jan 20 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
Python import与from import使用及区别介绍
Sep 06 Python
python进行TCP端口扫描的实现
Dec 21 Python
Python实现个人微信号自动监控告警的示例
Jul 03 Python
python文件处理fileinput使用方法详解
Jan 02 Python
Python log模块logging记录打印用法解析
Jan 20 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
Python基本知识点总结
Apr 07 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
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
Js获取事件对象代码
2010/08/05 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
微信小程序自定义组件
2017/08/16 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
python 带时区的日期格式化操作
2020/10/23 Python
毕业生医学检验求职信
2013/10/16 职场文书
园林技术个人的自我评价
2014/01/08 职场文书
学校运动会霸气口号
2014/06/07 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python