请选择 进入手机版 | 继续访问电脑版

影子论坛

搜索
查看: 3059|回复: 1

[Python] Python3.8新特性

[复制链接]

4

主题

5

帖子

120

积分

倔强青铜Ⅱ

积分
120
发表于 2019-11-30 13:20:28 | 显示全部楼层 |阅读模式
python3.8正式版已经发布了一个多月了,现在来分享已经不算第一手资料了,甚至连新特性都不算了,但是我想分享些我自己对3.8的一些理解,绝非抄袭前面几个python版本都还遵循着18个月的发布周期,从python3.8开始,之前有说法是8个月更新周期,不过11月的正式说明为12个月,这意味着明年10月份python3.9正式版就该发布了,看似时间还长,实际上,上周四,python3.9第一个alpha版已经发布了,一下子让我觉得自己的学习速度跟不上python的更新速度了。所以及时学习python的新功能对python开发者来说还是太有必要了。

说明:本贴只写出了一些基本的更新以及比较浅的一些知识,基本符合一般开发者使用,大神请异步。毕竟底层的东西我也搞不懂

1. 海象运算符
海象运算符 := ,这个运算符不是一个新产物,了解go语言的知道go语言中也有类似的运算符,但是功能可能会有部分差异。python3.8新添加的这个运算符主要作用为赋值并将该值返回,代码说明:
  1. print(a=5)
复制代码
这句代码在python中会报错,抛出TypeError,说明赋值运算符是没有返回值的,但使用python3.8中的海象运算符则不会报错:
  1. >>> print(a:=5)
  2. 5
复制代码
海象运算符更多的是用在循环判断中,使赋值和判断融合在一句代码中,使程序更加简洁,如:
  1. if (n := len(a)) >10:
  2.     print(f'List is too long({n}elements, expected<=10)')
复制代码


2. 仅位置参数
仅位置参数主要用在python的函数传递中,python3.8之前的形参可以使用*分割,*后面的表示只能使用关键字传参,*前面的既可以使用关键字传参,也可以使用位置参数,仅位置参数表示在形参中加入一个/,/之前的只能使用位置参数,这样就可以将参数传递方法固定的更死,保证传参正确性。代码说明:
  1. def func(a, b, /, c, d, *, e, f):
  2.     pass
复制代码
上述代码中,a, b只能通过位置传参,c, d 既可以通过位置传参,也可以通过关键字传参, e, f只能通过关键字传参

3. f字符串调试
在python3.6中添加了一个f-string,使打印变量变得更方便。python3.8在此基础上添加了调试的方法,更方便开发者用于变量的打印调试,代码说明:
  1. >>> a = 'hello'
  2. >>> b = 'world'
  3. >>> print(f'{a=},{b=}')
  4. a = hello,b = world
复制代码
在变量后面加一个=,生成字符串的时候就会将变量名自动添加出来,使调试方法变得更“优美”

4. 字典有序可逆
python3.6中重写了字典的底层,从底层原理上来看,字典变得有序,也使字典的性能变得更好。python3.8给字典添加了一个reversed的方法,使其可逆,虽然在使用中我们认为字典依然是无序的。
  1. >>> dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
复制代码


5. 其他的一些更新
1.Unittest支持异步测试,在测试属性前面添加async,即可使用异步测试
2.Pickle使用新协议,python3.8中pickle中的协议更新为协议5,据说是速度快了很多。
3.__pycache__单独指定保存位置,pycache主要是用来保存python脚本的编译字节码的,3.8版本支持保存不同版本的字节码,而且可以自定义保存位置。
4.Finally可以使用continue,3.8之前不支持这个功能主要是具有逻辑错误,但是我也不知道3.8以后再什么情况下需要再finally中使用continue
5.许多内置函数和方法速度快20%-50%,不解释,每次更新必填
6.多进程内存共享,3.8之前的版本多进程数据传递一般是通过文件读写、套接字传递,3.8使用内存共享再数据传输上速度更快了。
7.venv现在在所有平台上都包含一个activate.ps1脚本,python在windows和类Unix平台上启动虚拟环境方法是不一样的,3.8的venv模块中在所有平台上添加了一个activate.ps1脚本,不同平台都可以通过该脚本启动虚拟环境。
8.math模块添加计算欧几里得距离方法,这个方法我也不知道干啥的,当你需要使用的时候你就知道这个方法是个啥了。
9.PythonC API和CPython实现,现在python越来越重视调用C或者被C调用了,此次python C据说是一次很大的更新,还没有完全完成。具体内容我没使用过,完全感受不到重要性。哈哈哈。

以上就是我的python新特性分享。如果有错误,欢迎指出分享讨论,本人虚心接收所有批评。毕竟逆风的方向,更适合飞翔。

影子论坛是一个高度自由简约的资源共享平台
回复

使用道具 举报

417

主题

718

帖子

3950

积分

管理员

积分
3950
发表于 2019-11-30 23:12:45 | 显示全部楼层
学到了
影子论坛是一个高度自由简约的资源共享平台
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表