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实现过滤单个Android程序日志脚本分享
Jan 16 Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
python并发和异步编程实例
Nov 15 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
python 对字典按照value进行排序的方法
May 09 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
python调用动态链接库的基本过程详解
Jun 19 Python
Python 导入文件过程图解
Oct 15 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
python实现滑雪游戏
Feb 22 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文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
用 JSON 处理缓存
2007/04/27 Javascript
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
python求斐波那契数列示例分享
2014/02/14 Python
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
详解python基础之while循环及if判断
2017/08/24 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
Python __slots__的使用方法
2020/11/15 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
linux面试题参考答案(5)
2016/11/05 面试题
大学生应聘推荐信范文
2013/11/19 职场文书
农村婚礼证婚词
2014/01/08 职场文书
行政办公室岗位职责
2014/03/18 职场文书
精神文明单位申报材料
2014/05/02 职场文书
心理健康日活动总结
2014/05/08 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android