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检测服务器是否正常
Feb 16 Python
Python对文件操作知识汇总
May 15 Python
Python利用IPython提高开发效率
Aug 10 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
python画折线图的程序
Jul 26 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
Python3几个常见问题的处理方法
Feb 26 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
python os模块常用的29种方法使用详解
Jun 02 Python
python之PySide2安装使用及QT Designer UI设计案例教程
Jul 26 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
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
jQuery 获取URL参数的插件
2010/03/04 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
详解vue-router传参的两种方式
2018/09/10 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
python中map()函数的使用方法示例
2017/09/29 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
python中可以声明变量类型吗
2020/06/18 Python
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
应届生英语教师求职信
2013/11/05 职场文书
高中毕业生个人自我鉴定
2013/11/24 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
家长对学生的评语
2014/04/18 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
学习党史心得体会2016
2016/01/23 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
MySQL约束超详解
2021/09/04 MySQL
改造DE1103三步曲
2022/04/07 无线电