Python 2与Python 3的区别
越来越多的库要放弃Python 2了,强哥也开始转向Python 3了。最近的项目开始用Python3写了,也体会了一下2和3的区别。主要的一些区别在以下几个方面:
print函数
整数相除
Unicode
异常处理
xrange
map函数
不支持has_key
print函数
Python 2中print是语句(statement),Python 3中print则变成了函数。在Python 3中调用print需要加上括号,不加括号会报SyntaxError
Python 2
print "hello world"
输出
hello world
Python 3
print("hello world")
输出
hello world
print "hello world"
输出
File "<stdin>", line 1
print "hello world"
^
SyntaxError: Missing parentheses in call to 'print'
整数相除
在Python 2中,3/2的结果是整数,在Python 3中,结果则是浮点数
Python 2
Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。
为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。
许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。
为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。
新的Python程式建议使用Python 3.0版本的语法。
除非执行环境无法安装Python 3.0或者程式本身使用了不支援Python 3.0的第三方库。目前不支援Python 3.0的第三方库有Twisted, py2exe, PIL等。
大多数第三方库都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。
Python 3.0的变化主要在以下几个方面:
print 函数
print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:
print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数
然而,Python 2.6实际已经支持新的print()语法:
字符编码: py3中默认字符编码是unicode;py2中默认字符编码是 ASCII,如果文件中出现了中XM返佣https://www.kaifx.cn/broker/xm.html文,需要在顶部加入coding声明#coding:utf8
让用户输入:py3中直接使用input(); py2中需要使用raw_input()
range和xrange:py3中的range == py2中的 xrange, 返回类似迭代器的东西,节省内存空间
语句变函数: py3中为print(), exec() 是一个方法,必须加上括号; py2中为print, exec
数据传输: py3中socket传过来的数据是byte类型 / hashlib包update也需要传bytes类型的数据; py2中则可以直接传入str, e.g
|
|