本文最后更新于 320 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com
Python 2和3的核心区别
不少企业的代码或实际项目升级Python版本的成本很高,所以保留了相当多的Python 2程序。为了阅读与运维这些程序,了解Python 2和3的一些核心区别十分重要
整数除法
- Python 2中,两个整数的运算结果只能是整数,对于除不尽的情况,Python 2会将结果向下取整,返回小于该结果的最大整数,如12/5的值为2。
- Python 3中,除法返回浮点数,12/5的结果为2.4。
12 / 5
2.4
整形与长整型
- Python 2中,当整数大于一定范围时,Python 2会自动将整数由整型转换为长整型(long),长整型以数字+L表示,如12345678765434567876543L。
- Python 3中,长整型被取消,整数都是整型(int)
12345678765434567876543
12345678765434567876543
type(12345678765434567876543)
int
f字符串
- Python 3中,引入了f字符串进行格式化,可以在占位符中直接使用已有变量的表达式
a = 100
f"{a=}, a is {a}"
'a=100, a is 100'
字符串类型
- Python 2中,str类型默认使用ASCII编码,unicode类型使用Unicode编码
- Python 3中,str类型默认使用Unicode编码,bytes类型使用ASCII编码
a = "中国"
type(a)
str
len(a)
2
a = b'abc'
type(a)
bytes
不同类型的比较
- Python 2中,支持,如字符串与数字可以比较大小
- Python 3中,不支持,字符串与数字不可以比较大小
# 3 > "abc" #会报错
字典键值对方法的返回类型
- Python 2中,.keys()、.values()、.items()方法返回列表
- Python 3中,.keys()、.values()、.items()方法分别返回dict_keys、dict_values、dict_items类型
a = {1: 1, 2: 4}
a.keys(), a.values(), a.items()
(dict_keys([1, 2]), dict_values([1, 4]), dict_items([(1, 1), (2, 4)]))
range(), map(), filter(), zip()函数返回值
- Python 2中,返回列表
- Python 3中,返回一个迭代器对象
range(5)
range(0, 5)
zip([1,2,3], [4,5,6])
ord(), chr()函数
- Python 2中,只支持ASCII字符码即0-255
- Python 3中,支持所有Unicode码
ord("我")
25105
chr(25105)
'我'
round()函数
- Python 2中,数字5四舍五入到离0较远的一边
- Python 3中,数字5近似到偶数
round(1.5)
2
round(2.5)
2
迭代器对象的下一个值
- Python 2中,
.next()
方法 - Python 3中,
.__next__()
方法
a = [1, 2, 3]
i = a.__iter__()
i.__next__()
1
pathlib模块
- Python 3中,新增pathlib模块,处理路径
from pathlib import Path
p = Path(".")
p / "123.txt"
PosixPath('123.txt')
urllib模块
- Python 2中,urllib和urllib2两个模块
- Python 3中,功能移到urllib.request和urllib.parse两个子模块
运算符@
- Python 3中,矩阵乘法可以以运算符
@
实现:
import numpy as np
a = np.array([[1, 2], [3, 4]])
a @ a
array([[ 7, 10],
[15, 22]])
a.dot(a)
array([[ 7, 10],
[15, 22]])