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

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

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. Example Code for a TMP102 I2c Thermometer————Arduino

    参考:https://playground.arduino.cc/Code/TMP102/ Example Code for a TMP102 I2c Thermometer I've fairly ...

  2. Java 从现在到次日零时还剩余多少秒

    参考:计算从现在到凌晨00:00还剩余多少秒 应用场景:某些应用需要在特定的时间点更新数据 1 import java.text.DateFormat; 2 import java.text.Simp ...

  3. 《To C产品经理进阶》

    我所说的,都是错的. To C产品设计和To B产品设计对一个优秀的产品经理的洞察能力.架构能力有共通的要求. 实际产品设计过程中,To C产品往往是从商业思维思考,侧重用户研究,思考用户心智,由产品 ...

  4. Android和CraigDJ

    下载HTML source - 46.8 KB 下载APK - 8.1 MB Introduction  大家好,欢迎来到我的Android应用程序项目! 我必须承认,我仍然对原生安卓环境几乎一无所知 ...

  5. minikube dashboard报503的错误

    minikube start之后,minikube dashboard启动web界面报503错误 解决方案,删除掉c盘用户目录下的.kube和.minikube目录,重新启动,具体什么原因导致的呢,也 ...

  6. 持续集成工具之Jenkins使用配置

    在上一篇博客中,我们主要介绍了DevOps理念以及java环境和jenkins的安装,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13805666.html: ...

  7. linux CentOS7 防火墙操作

    1, 查看防火墙状态: firewall-cmd --state systemctl status firewalld.service 2, 开启防火墙: systemctl start firewa ...

  8. 加密sqlite3数据库文件

    目录 EncryptSqlite3 实现原理 使用方法 不足之处 GitHub地址 EncryptSqlite3 加密sqlite3数据库,产生的数据库文件别人打不开. 实现原理 在写入文件前对每个字 ...

  9. Linux运维学习第五周记

    休惊岁岁年年貌 且对朝朝暮暮人 细雨晴时一百六 画船鼍鼓莫违民 雨生百谷,春雨贵如油 第五周学记 这周主要学习了九三级磁盘.存储相关知识和Linux文件系统以及计算机网络的内容 磁盘和文件系统 磁盘结 ...

  10. app反编译遇到360加固,傻瓜式脱壳

    转载https://blog.kieng.cn/2051.html 第一步 电脑安装安卓模拟器,我使用的是雷电模拟器(推荐). 第二步 打开模拟器,准备安装软件: 1.需要脱壳的软件 2.XP 框架. ...