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中文编码问题小结
Sep 28 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
在Pandas中处理NaN值的方法
Jun 25 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
Python测试线程应用程序过程解析
Dec 31 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
Python学习笔记之装饰器
Aug 06 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
May 31 Python
Python+Appium自动化测试的实战
Jun 30 Python
Python制作春联的示例代码
Jan 22 Python
bat批处理之字符串操作的实现
Mar 16 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多线程抓取网页实现代码
2010/07/22 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
PHP解析RSS的方法
2015/03/05 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
vue router demo详解
2017/10/13 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
详解python中的json的基本使用方法
2016/12/21 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
scrapy头部修改的方法详解
2020/12/06 Python
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
What is EJB
2016/07/22 面试题
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
高分子材料与工程专业个人求职信
2013/12/15 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python