1.Python 2 对于int[整型]
和 long[长整型]
采用不同的数据类型。int
数据类型受到 sys.maxint
的限制,因平台该限制也会有所不同,但通常是 $2^32-1$。Python 3 只有一种整数类型,其行为方式很有点像 Python 2 的旧 long[长整数]
类型。
2.在 Python 2 中,运算符 /
通常表示整数除法,但是可以通过在代码中加入特殊指令,使其看起来像浮点除法。在 Python 3 中,/
运算符总是表示浮点除法。
3.在Python 3,所有的字符串都是使用Unicode编码的字符序列。不再存在以UTF-8或者CP-1252编码的情况。也就是说,“这个字符串是以utf-8编码的吗?不再是一个有效问题。”utf-8是一种将字符编码成字节序列的方式。如果需要将字符串转换成特定编码的字节序列,Python 3可以为你做到。如果需要将一个字节序列转换成字符串,Python 3也能为你做到。字节即字节,并非字符。字符在计算机内只是一种抽象。字符串则是一种抽象的序列。
在Python 2中,字符串是一个字节数组,它的字符编码信息被分开记录着。如果想要Python 2跟踪字符编码,你得使用Unicode编码的字符串(u''
)。但是在Python 3中,字符串永远都是Python 2中所谓的Unicode编码的字符串 — 即,Unicode字符数组(可能存在可变长字节)。
4.python3中print只能当函数使用
5.字节即字节;字符是一种抽象。一个不可变(immutable)的Unicode编码的字符序列叫做string。一串由0到255之间的数字组成的序列叫做bytes对象。
6.bytes
对象有一个decode()
方法,它使用某种字符编码作为参数,然后依照这种编码方式将bytes
对象转换为字符串(解码),对应地,字符串有一个encode()
方法,它也使用某种字符编码作为参数,然后依照它将串转换为bytes
对象(编码)。
7.Python 2里,.py
文件默认的编码方式为ascii。Python 3的源码的默认编码方式为utf-8
8.python2迭代器类实现的是next方法,python3实现的是next方法。iter(f) 调用 f.iter next(f) 调用 f.next
9.range(1,10)python2返回的是一个序列,py3返回的是一个视图,zip()函数类似
10.字符串的translate()
方法,字符串翻译。在py2中需要一个由256个字符组成的字符串转换表(通常的做法是用string模块的maketrans方法生成一个转换表),在py3中,转换表就是一个将一个字符映射到另一个字符的字典。实际上,“字符” 是不正确的 — 转换表实际上是将一个 字节(byte)映射到另一个。,Python 3 中的字节是整形数。所以一个通常的转表如{ord(‘A’): ord(‘O’)}
11.with 代替try…finally..解决打开文件出现异常的情况。with
语句创建了一个运行时环境(runtime context)
12.io.StringIO
让你能够将一个字符串作为文本文件来看待。另外还有一个io.ByteIO
类,它允许你将字节数组当做二进制文件来处理。py27中StringIO,只能接收unicode字符串
13.类定义中两个特殊的方法enter()在进入一个上下文环境时Python会调用它(即,在with
语句的开始处) exit()当离开一个上下文环境时(即,在with
语句的末尾)
14.用于和httpweb 服务交互的库:py33自带http.client和urllib.request(py33 urllib.request.urlopen ,py27 urllib.urlopen),py33中没有了urllib2,py27 没有http.client。
http.client 是实现了rfc 2616, http 协议的底层库urllib.request
建立在http.client
之上一个抽象层。 它为访问http 和 ftp 服务器提供了一个标准的api,可以自动跟随http 重定向, 并且处理了一些常见形式的http 认证。
httplib2,一个第三方的开源库,它比http.client
更完整的实现了http协议,同时比urllib.request
提供了更好的抽象。httplib2
对于Python 2.x 和 Python 3.x都有对应的版本
Python的http库不支持缓存,而httplib2
支持。
Python的http 库不支持最后修改时间检查,而httplib2
支持。
Python的 http库不支持压缩,但httplib2
支持
urllib.request
模块在从http服务器收到对应的状态码的时候会自动“跟随”重定向, 但它不会告诉你它这么干了。你最后得到了你请求的数据,但是你永远也不会知道下层的库友好的帮助你跟随了重定向。结果是,你继续访问旧的地址,每一次你都会得到新地址的重定向,每一次urllib.request
模块都会友好的帮你跟随重定向。换句话说,它将永久重定向当成临时重定向来处理。这意味着两个来回而不是一个,这对你和服务器都不好。
httplib2
帮你处理了永久重定向。它不仅会告诉你发生了永久重定向,而且它会在本地记录这些重定向,并且在发送请求前自动重写为重定向后的url。
httplib2:http://woodpecker.org.cn/diveintopython3/http-web-services.html
15.Python 3自带了一个叫做2to3
的实用脚本,它使用Python 2的源代码作为输入,然后尽其可能地将其转换到Python 3的规范。
16.在Python 3中相对导入的逻辑已经变了。在Python 2中,我们只需要import constants
,然后它就会首先在chardet/
目录中查找。在Python 3中,所有的导入语句默认使用绝对路径。如果想要在Python 3中使用相对导入,
你需要显式地说明 from .import constants
python2与python3的区别
http://woodpecker.org.cn/diveintopython3/porting-code-to-python-3-with-2to3.html