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调用新浪微博API项目实践
Jul 28 Python
python正则表达式中的括号匹配问题
Dec 14 Python
分析在Python中何种情况下需要使用断言
Apr 01 Python
Python中使用partial改变方法默认参数实例
Apr 28 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
Python实现Youku视频批量下载功能
Mar 14 Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
Python post请求实现代码实例
Feb 28 Python
使用Python操作MySQL的小技巧
Sep 10 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 heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
discuz的php防止sql注入函数
2011/01/17 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
php提交post数组参数实例分析
2015/12/17 PHP
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
Javascript学习指南
2014/12/01 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
Python中使用不同编码读写txt文件详解
2015/05/28 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
哪些是python中web开发框架
2020/06/17 Python
最新大学职业规划书范文
2013/12/30 职场文书
劳动竞赛口号
2014/06/16 职场文书
2015年企业新年寄语
2014/12/08 职场文书
入党政审材料范文
2014/12/24 职场文书
公司管理制度范本
2015/08/03 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js
python 闭包函数详细介绍
2022/04/19 Python
SQL Server中搜索特定的对象
2022/05/25 SQL Server