2026-10-30 08:58:13
Python是一种动态的强类型语言,动态指运行期间才做数据类型检查,强类型是针对类型检查的严格程度而言的。例如:
print(1+'1')# 发生异常: TypeError,unsupported operand type(s) for +: 'int' and 'str'print(1+int('1'))# 输出:2file、StringIO、socket对象都支持read/write方法。
定义了__iter__魔术方法的对象都支持for迭代。
class Dog: def howl(self): print("汪汪汪")class Cat: def howl(self): print("喵喵喵")animal=Dog()animal.howl()animal=Cat()animal.howl()Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动。有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了。直接把代码升级到3.x是比较冒进的,因为有大量的改动需要测试。相反,可以在2.x版本中先在一部分代码中测试一些3.x的特性,如果没有问题,再移植到3.x也不迟。
区别Py3.0运行pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果。Py3.1性能比Py2.5慢15%,还有很大的提升空间。
Py3.X源码文件默认使用utf-8编码,以下代码是合法的:
中国 = 'china' print(中国) # 输出:china去除了<>,全部改用!=。
在Python 2里,为了得到一个任意对象的字符串表示,有一种把对象包装在反引号里(比如x)的特殊语法。在Python 3里,这种能力仍然存在,但是不能再使用反引号获得这种字符串表示,需要使用全局函数repr(x)。
关键词加入as和with,还有True,False,None。
整型除法返回浮点数,要得到整型结果,请使用//。
加入nonlocal语句。使用noclocal x可以直接指派非全局变量。
去除print语句,加入print()函数实现相同的功能。同样的还有exec语句,已经改为exec()函数。
改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出TypeError而不是返回随机的bool值。
输入函数改变了,删除了raw_input,用input代替:
2.X:guess = int(raw_input('Enter an integer : '))
3.X:guess = int(input('Enter an integer : '))
支持class decorator。用法与函数decorator一样。
字符串和字节串:
Python 2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成Unicode字符串,还有str()把对象转换为非Unicode字符串。
Python 3只有一种字符串类型,Unicode字符串,所以str()函数即可完成所有的功能。(unicode()函数在Python 3里不再存在了。)

在Python 2.x中,对于除法有两种情况,如果是整数相除,结果仍是整数,余数会被扔掉;要做精确除法,必须把其中一个数变成浮点数。
在Python 3.x中,所有的除法都是精确除法,整数相除用//表示。
如果想在Python 2.7的代码中直接使用Python 3.x的除法,可以通过__future__模块的division实现:
from __future__ import divisionprint 10/3# 输出:3.33333333333print 10//3# 输出:3print 10.0/3# 输出:3.33333333333