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 19 Python
详谈python read readline readlines的区别
Sep 22 Python
python中实现精确的浮点数运算详解
Nov 02 Python
详细分析python3的reduce函数
Dec 05 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
详解用Python练习画个美队盾牌
Mar 23 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
浅析python标准库中的glob
Mar 13 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
详解Python直接赋值,深拷贝和浅拷贝
Jul 09 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 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
PHP身份证校验码计算方法
2016/08/10 PHP
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
javascript闭包的理解
2015/04/01 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
URL中“#” “?” &amp;“”号的作用浅析
2017/02/04 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
python实现决策树
2017/12/21 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
对python 自定义协议的方法详解
2019/02/13 Python
python微信撤回监测代码
2019/04/29 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
python 修改本地网络配置的方法
2019/08/14 Python
python之array赋值技巧分享
2019/11/28 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
python读取mysql数据绘制条形图
2020/03/25 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
编辑硕士自荐信范文
2013/11/27 职场文书
球队口号
2014/06/18 职场文书
人事专员岗位说明书
2014/07/29 职场文书
公司表扬信格式
2015/05/04 职场文书
放飞理想主题班会
2015/08/14 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
Ajax异步刷新功能及简单案例
2021/11/20 Javascript