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