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下载FTP上的文件夹的实现代码
Feb 10 Python
python中的装饰器详解
Apr 13 Python
详解Python中break语句的用法
May 14 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
Jul 01 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
Python编写打字训练小程序
Sep 26 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
Oct 14 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
python 下划线的不同用法
Oct 24 Python
90行Python代码开发个人云盘应用
Apr 20 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
JQuery index()方法使用代码
2010/06/02 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
python中函数传参详解
2016/07/03 Python
python获取地震信息 微信实时推送
2019/06/18 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
对Django中内置的User模型实例详解
2019/08/16 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
解释一下钝化(Swap out)
2016/12/26 面试题
初级Java程序员面试题
2016/03/03 面试题
服务中心夜班服务员岗位职责
2013/11/27 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
党员转正申请报告
2015/05/15 职场文书