您当前的位置: 首页 >  Python

顺其自然~

暂无认证

  • 2浏览

    0关注

    1317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python各版本的差异总结

顺其自然~ 发布时间:2020-09-28 22:17:16 ,浏览量:2

Python的版本主要分为 2.× 、 3.× 两个系列。

  • Python3计划每年发布一个新的子版本,一次只增加一两种新语法。
  • 使用时当然选择越新的Python版本越好,版本越老的代码越难维护。
  • 维护老版本的代码时,需要了解各版本之间的主要差异。有时看到一些代码的语法特点,可以大致猜出它是什么版本。
Python2与Python3

从Python2到Python3是一个大版本升级,有很多不向下兼容的差异,导致很多Python2的代码不能被Python3解释器运行,或者反之。

  • Python2的最后一个子版本是Python2.7,此后没有再发布新版本,只是发布一些维护补丁。
  • 到2020年,Python官方将停止对Python2的维护,所有老代码都会超过保质期。
差异点Python2Python3输出方式用print关键字,比如print "Hello"用print()函数,比如print("Hello")输入方式用raw_input()函数用input()函数字符串的编码格式默认采用ASCII默认采用Unicode格式化字符串的方式用 % ,比如"Hello, %s" % ("World")用format()函数,比如"Hello, {}".format('World')源文件的编码格式默认采用ASCII,因此使用中文时要在源文件开头加上一行# -*- coding: utf-8 -*-默认采用uft-8……… Python2系列
  • Python2.0:于2000年发布https://www.python.org/downloads/release/2.0/
  • Python2.1 ~ Python2.6 略
  • Python2.7:于2010年发布https://www.python.org/downloads/release/python-270/
Python3系列
  • Python3.0:于2008年发布https://www.python.org/download/releases/3.0/
  • Python3.1 ~ Python3.3 略
Python3.4
  • 于2014年发布:https://www.python.org/downloads/release/python-340/

  • 采用pip作为Python包的默认安装方式。

增加了标准库pathlib,用于按面向对象的方式操作文件路径。如下:

>>> from pathlib import Path
>>> p = Path('/root/test/1.py')
>>> p.name
'1.py'
>>> p.suffix
'.py'
>>> p.exists()
False

增加了标准库enum,用于定义枚举类。如下:

>>> from enum import Enum
>>>
>>> class Test(Enum):
...     a = 1
...     b = 2
...     c = 3
...
>>> Test.a

>>> Test['a']     # 可按名字索引

>>> list(Test)    # 可迭代
[, , ]
  • 增加了标准库asyncio,用于实现异步IO。

  • 增加了标准库statistics,提供了求平均值、中位数、方差等运算的函数。

  • 增加了标准库tracemalloc,用于跟踪内存分配的情况,方便调试。

Python3.5
  • 于2015年发布:https://www.python.org/downloads/release/python-350/

  • 扩展了迭代拆包运算符 * 、字典拆包运算符 ** 的用法:

可以在元组、列表、集合、字典表达式中使用

>>> *range(4)
SyntaxError: can't use starred expression here
>>> *range(4), 4
(0, 1, 2, 3, 4)
>>> [*range(4), 4]
[0, 1, 2, 3, 4]
>>> {'a': 1, **{'b': 2}}
{'a': 1, 'b': 2}

 

以同时使用多次

>>> print(*[1], *[2], *{'c': 3})
1 2 c
>>> dict(**{'a': 1}, **{'b': 2})
{'a': 1, 'b': 2}

允许使用Python2风格的 % 格式化字符串,如下:

>>> '%a' % 3.14
'3.14'
>>> b'%a' % 3.14
b'3.14'

增加了函数注释的语法,用于说明形参、返回值的类型。

>>> def fun1(a, b: "字符串或None", c: int = 0)-> int:
...     pass
...
>>> fun1.__annotations__
{'b': '字符串或None', 'c': , 'return': }
  • 它只是注释,不影响程序运行。
  • 它存储在函数的__annotations__属性中。

增加了用asyncawait关键字定义协程的语法:

async def read_db(db):
    data = await db.fetch('SELECT ...')
  • 增加了标准库zipapp,用于将Python脚本打包成可执行的归档文件,后缀名为 .pyz。
Python3.6
  • 于2016年发布:https://www.python.org/downloads/release/python-360/

  • dict中的元素会按插入顺序存储。

  • 可以在数字中插入下划线作为分隔符,提高可读性。如下:

>>> 1_000_111_000
1000111000
>>> '{:_}'.format(1000000)    # 格式化字符串时也可输出下划线
'1_000_000'
  • 给字符串加上前缀f之后,就会执行花括号 {} 内的语句。如下:

>>> a = 1
>>> f'a={a}'
'a=1'
>>> f'{int(1) + 2}'
'3'
  • 义元类的更好方法:给类定义__init_subclass__()方法,用于初始化子类。如下:

class TestBase:
    subclasses = []

    def __init_subclass__(cls, *args, **kwargs):
        super().__init_subclass__(*args, **kwargs)
        cls.subclasses.append(cls)
  • 加了标准库secrets,用于生成安全的随机数,可用作密码、加密密钥。(random模块生成的随机数是不安全的哦)

Python3.7
  • 于2018年发布:https://www.python.org/downloads/release/python-370/
Python3.8
  • 于2019年发布:https://www.python.org/downloads/release/python-380/

  • 增加了赋值表达式的语法,可以给表达式中的变量赋值。如下:

if a := input():    # a = input(); if a:
    print(a)
>>> (a := 0) + 1
1
>>> a
0
  • 定义函数时,在正斜杆 / 之前的参数都会被视作位置参数。如下:

>>> def fun1(a, b, c=0, /, *args, **kwargs):
...     pass
...
>>> fun1(1, 2, 3)
>>> fun1(1, 2)
  • 可以在f字符串中用变量=的形式打印变量的值,这在调试时很方便。如下:

>>> x = 1
>>> print(f'{x=}')
x=1
  • 可以在finally语句块中使用continue关键字。
  • multiprocessing模块增加了一个SharedMemory类,用于创建进程之间的共享内存。

关注
打赏
1662339380
查看更多评论
立即登录/注册

微信扫码登录

0.0443s