本文共 1632 字,大约阅读时间需要 5 分钟。
Python3相较于Python2.5,在性能、编码、语法、字符串处理、数据类型等方面都有显著变化。以下是这些差异的详细解析。
Py3.0的运行速度比Py2.5慢了30%,但Guido认为Python3有很大的优化空间,尤其是在字符串和整型操作上。Py3.1的速度比Py2.5慢了15%,仍有提升空间。
Py3.X源码默认使用utf-8编码,这使得字符串操作更加简便。例如,可以直接使用中国 = 'china'并打印,结果会自动识别为'china'。
Python3的语法有许多重要更新:
!=表示不等于。repr()。as、with、True、False、None等关键字。/现在返回浮点数,需使用//获取整数结果。print()函数取代了print语句,支持多参数打印和文件输出。(b, c)形式了。0o666表示八进制,而Py2.X使用0666。super().__init__()、exec()函数等。str类型,类似于Py2.X的unicode。bytes类型,b'china'表示字节串。str和bytes可以互相转换,使用.decode()和.encode()方法。int类型,行为与Py2.X的long一致。bytes类型:与Py2.X的str类似,但需要重新编码和解码。keys()、items()和values()返回迭代器,废弃了iterkeys()等函数。next()方法改名为__next__(),新增内置next()函数。@abstractmethod和@abstractproperty,简化了抽象方法和属性的定义。BaseException继承,StandardError被移除。as关键字捕获异常,Py3.X的语法更简洁。.message属性,错误信息通过str(error)获取。cPickle、imageop、audiodev等模块,pickle模块成为主流。os.tmpnam()和os.tmpfile()移动到tmpfile模块。tokenize.tokenize(),处理方式更高效。xrange()改名为range(), 使用list(range(10))显式生成列表。bytes对象不能哈希,b.lower()等方法被移除,但可以使用b.strip(b'\n\t\r\f')等方法替代。apply()、callable()等函数被移除,hasattr()替代callable()。x < y在类型不匹配时抛出TypeError,Py2.X会返回布尔值。file类不存在,需要使用其他方式处理文件操作。__closure__属性表示闭包,旧名__closure__已不再使用。以上是Python3相较于Python2.5的主要变化,了解这些差异有助于更好地进行代码迁移和开发。
转载地址:http://qhqfk.baihongyu.com/