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

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

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

  • Python2的最后一个子版本是Python2.7,此后没有再发布新版本,只是发布一些维护补丁。
  • 到2020年,Python官方将停止对Python2的维护,所有老代码都会超过保质期。

差异点

Python2

Python3

输出方式

用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系列
Python3系列
Python3.4

增加了标准库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: 1>
>>> Test['a'] # 可按名字索引
<Test.a: 1>
>>> list(Test) # 可迭代
[<Test.a: 1>, <Test.b: 2>, <Test.c: 3>]
  • 增加了标准库asyncio,用于实现异步IO。
  • 增加了标准库statistics,提供了求平均值、中位数、方差等运算的函数。
  • 增加了标准库tracemalloc,用于跟踪内存分配的情况,方便调试。
Python3.5

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

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

>>> *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'

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

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

增加了用async、await关键字定义协程的语法:

async def read_db(db):
data = await db.fetch('SELECT ...')
  • 增加了标准库zipapp,用于将Python脚本打包成可执行的归档文件,后缀名为 .pyz。
Python3.6

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

>>> 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
Python3.8

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

if a := input():    # a = input(); if a:
print(a)
    • 1
    • 2
>>> (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类,用于创建进程之间的共享内存。

python的各版本的不同的更多相关文章

  1. python开发学习-day01 (python安装与版本、字符串、字典、运算符、文件)

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  2. AES加密例子(python和php版本)

    AES加密例子(python和php版本) AES加密例子(python和php版本)

  3. 关于virtualenvwrapper的python, pip 的版本的问题

    关于virtualenvwrapper的python, pip 的版本的问题: 在创建虚拟环境时, 我们可以用 mkvirtualenv THE_NAME_OF_VENV --python=pytho ...

  4. windows安装多个python及pip版本

    windows安装多个python及pip版本 1.下载所需要的python2和python3安装包 2.一路next 3.设置环境变量 4.修改python安装目录下的可执行程序名称 5.在cmd中 ...

  5. Python linux多版本共存以及虚拟环境管理(转摘)

    Python linux多版本共存以及虚拟环境管理 2017年08月01日 18:42:25 sliderSun 阅读数:197更多 个人分类: python   版权声明:本文为博主原创文章,未经博 ...

  6. ubuntu16.04下python2、python3环境选择与python升级(pip版本切换)

    参考链接:https://www.jianshu.com/p/63c1f22e1fed Ubuntu中python版本问题: 添加PPA: sudo add-apt-repository ppa:jo ...

  7. python 3以上版本使用pickle.load读取文件报UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6

    python 3以上版本使用pickle.load读取文件报UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6 ...

  8. 用setuptools_scm来自动控制Python包的版本

    手动管理Python包的版本号一段时间后,寻求自动化的手段,是自然而然的. 手动管理版本 手动管理Python包的版本,需要注意两个方面: 每次发布新包前,要更新包的版本号. 在安装后的默认模块下应该 ...

  9. [转]windows环境下使用virtualenv对python进行多版本隔离

    windows环境下使用virtualenv对python进行多版本隔离 最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为<机器学习 ...

  10. 【python】如何查看已经安装的python软件包和版本

    pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. pip freeze可以查看已经安装的python软件包和版本 pip list 也可以

随机推荐

  1. Activity的常用控件

    TimerPick(时间控件)public Integer getCurrentHour() //返回当前设置的小时public Integer getCurrentMinute()//返回当前设置的 ...

  2. 深入浅出学Java-HashMap

    一.概要 HashMap在JDK1.8之前的实现方式 数组+链表,但是在JDK1.8后对HashMap进行了底层优化,改为了由 数组+链表+红黑树实现,主要的目的是提高查找效率. 如下图所示: JDK ...

  3. 用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕!

    众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...

  4. 《我想进大厂》之Redis夺命连环11问

    这是面试题系列第三篇--redis专题. 说说Redis基本数据类型有哪些吧 字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型.C语言的字符串不记 ...

  5. Golang是如何操作excel的?

    关键术语介绍 为了方便开源库的快速上手,我们先来了解 excel 中的几个关键术语,如下图所示,①为sheet,也就是表格中的页签:②为row,代表 excel 中的一行:③为cell,代表 exce ...

  6. 多测师讲解selenium--常用关键字归纳-_高级讲师肖sir

    常见的定位方式: 1.通过id定位 id=kw 2.通过name定位 name=wd 3.通过xpath相对路径定位:xpath=//*[@id="kw"] 4.通过两个属性值定位 ...

  7. 多测师_测试理轮_002(v模型和H模型)

    为什么要测试?1.软件非正常运行或自身缺陷会引发问题2.代码和文档是人写的,难免会出错3.环境原因影响软件(内存不足,存储,数据库溢出等)4.软件测试活动是保证软件质量的关键之一 什么是测试?软件行业 ...

  8. python post与get请求的区别

    post:请求的url不带参数               查询参数在WebForms保存 get:请求的url会附带查询参数       查询参数在QueryString保存

  9. spring boot:配置druid数据库连接池(开启sql防火墙/使用log4j2做异步日志/spring boot 2.3.2)

    一,druid数据库连接池的功能? 1,Druid是阿里巴巴开发的号称为监控而生的数据库连接池 它的优点包括: 可以监控数据库访问性能 SQL执行日志 SQL防火墙 2,druid的官方站: http ...

  10. spring boot: 通过filter过滤器实现中文的简体繁体字符集转换(spring boot 2.3.1)

    一,为什么要使用filter来实现简繁体转换? 项目中有时会有同时支持简体和繁体两种字符集的要求, 或者搜索引擎有支持繁体输入字符的需求. 针对繁体字符的显示, 我们通常会在数据库和模板.文案配置中默 ...