python的各版本的不同
Python的版本主要分为 2.× 、 3.× 两个系列。
- Python3计划每年发布一个新的子版本,一次只增加一两种新语法。
- 使用时当然选择越新的Python版本越好,版本越老的代码越难维护。
- 维护老版本的代码时,需要了解各版本之间的主要差异。有时看到一些代码的语法特点,可以大致猜出它是什么版本。
从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.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.0:于2008年发布https://www.python.org/download/releases/3.0/
- Python3.1 ~ Python3.3 略
- 于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: 1>
>>> Test['a'] # 可按名字索引
<Test.a: 1>
>>> list(Test) # 可迭代
[<Test.a: 1>, <Test.b: 2>, <Test.c: 3>]
- 增加了标准库
asyncio
,用于实现异步IO。 - 增加了标准库
statistics
,提供了求平均值、中位数、方差等运算的函数。 - 增加了标准库
tracemalloc
,用于跟踪内存分配的情况,方便调试。
扩展了迭代拆包运算符 * 、字典拆包运算符 ** 的用法:
可以在元组、列表、集合、字典表达式中使用
>>> *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。
- 于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模块生成的随机数是不安全的哦)
增加了赋值表达式的语法,可以给表达式中的变量赋值。如下:
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的各版本的不同的更多相关文章
- python开发学习-day01 (python安装与版本、字符串、字典、运算符、文件)
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- AES加密例子(python和php版本)
AES加密例子(python和php版本) AES加密例子(python和php版本)
- 关于virtualenvwrapper的python, pip 的版本的问题
关于virtualenvwrapper的python, pip 的版本的问题: 在创建虚拟环境时, 我们可以用 mkvirtualenv THE_NAME_OF_VENV --python=pytho ...
- windows安装多个python及pip版本
windows安装多个python及pip版本 1.下载所需要的python2和python3安装包 2.一路next 3.设置环境变量 4.修改python安装目录下的可执行程序名称 5.在cmd中 ...
- Python linux多版本共存以及虚拟环境管理(转摘)
Python linux多版本共存以及虚拟环境管理 2017年08月01日 18:42:25 sliderSun 阅读数:197更多 个人分类: python 版权声明:本文为博主原创文章,未经博 ...
- ubuntu16.04下python2、python3环境选择与python升级(pip版本切换)
参考链接:https://www.jianshu.com/p/63c1f22e1fed Ubuntu中python版本问题: 添加PPA: sudo add-apt-repository ppa:jo ...
- 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 ...
- 用setuptools_scm来自动控制Python包的版本
手动管理Python包的版本号一段时间后,寻求自动化的手段,是自然而然的. 手动管理版本 手动管理Python包的版本,需要注意两个方面: 每次发布新包前,要更新包的版本号. 在安装后的默认模块下应该 ...
- [转]windows环境下使用virtualenv对python进行多版本隔离
windows环境下使用virtualenv对python进行多版本隔离 最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为<机器学习 ...
- 【python】如何查看已经安装的python软件包和版本
pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. pip freeze可以查看已经安装的python软件包和版本 pip list 也可以
随机推荐
- P 2568 GCD
对于这道题,我们要求的是 \(\displaystyle \sum_{i=1}^{N}\sum_{j = 1} ^{N}\) gcd(i,j)为质数 首先我们很容易想出来怎么打暴力,我们可以对于每个 ...
- 【题解】【POI2000】病毒
题目链接 这题让我们构造一个无限长的,不包括给定字符串的01串. 把给定字符串放到\(AC\)自动机上,在结尾处打上标记. 发现,如果我们要构造一个无限长的串,必然要有一个环. 那么这个环上就一定不能 ...
- CAD常用知识点
1.Ctrl+9:打开命令窗口: 2.删除标注或者其他(选择对象过滤器):输入fi后回车会出现对象选择过滤器窗口,以删除标注为例,点击选择过滤器-----标注 按以下顺序点击后回车, 框选要去掉的标注 ...
- 代码格式化工具:clang-format
IDE: Visual Studio Code Language: C/C++ 格式化工具: clang-format 安装 vscode安装扩展C/C++,扩展程序将自动安装clang-format ...
- Monolog - Logging for PHP
github地址:https://github.com/Seldaek/monolog 使用 Monolog 安装 核心概念 日志级别 配置一个日志服务 为记录添加额外的数据 使用通道 自定义日志格式 ...
- 第二十四章 IPtables防火墙
一.iptables防火墙基本概述 1.应用场景 1.主机安全2.端口转发/ip转发3.内部共享上网 2.iptables工作流程 1.配置防火墙规则可以添加在下面,也可以添加在前面,是有顺序的2.匹 ...
- 如何快速在vscode配置C/C++环境
目录 1.卸载重装vscode 2.下载vscode 3.下载MinGW 4.配置环境变量 5.配置c/c++环境 6.超完整的配置文件 7.常用扩展推荐 8.注意 9.后记 相信许多刚开始使用vsc ...
- 《Kafka笔记》4、Kafka架构,与其他组件集成
目录 1 kafka架构进阶 1.1 Kafka底层数据的同步机制(面试常问) 1.1.1 高水位截断的同步方式可能带来数据丢失(Kafka 0.11版本前的问题) 1.1.2 解决高水位截断数据丢失 ...
- LIS初级推算(最长上升子序列问题)
所谓LIS,就是Longest Increasing Subsequence问题 注意,子序列不一定是连续的,举个例子:对于序列10,9,2,3,5,4,7,9,101,18,其中的LIS就是2,3, ...
- 没事学学KVM(五)虚拟机基础管理
1.今天学习一下KVM的开机自启功能.开机启动,即随宿主机启动而启动 virsh autostart vm-name 开机自启的前提是libvirt功能也是开机启动的:systemctl enable ...