python2与python3的几点小区别
目录
Python 2在2020年元旦将正式停止官方支持(看这里),同时也有越来越多的 python 库不再支持 python 2,所以我们就来看看 pyhton 2 跟 python 3 有哪些区别,慢慢做个迁移~
__future__ 模块
通过 __future__ 模块,我们可以轻松使用 python 3 的特性,比如:
from __future__ import division # result is 1.4 print 7/5
其它可以使用的特性主要有:
feature | effect | |
generators | Simple Generators | |
division | Changing the Division Operator | |
absolute_import | Imports: Multi-Line and Absolute/Relative | |
with_statement | The “with” Statement | |
print_function | Make print a function | |
| Bytes literals in Python 3000 |
print 函数
python 2 中 print 是表达式,python 3 中 print 是函数:
# python 2 print 'python' print('python') # python 3 print 'python' # SyntaxError print('python')
除法运算
# python 2 print 7/5 # 1 print -7/5 # -2 # python 3 print(7/5) # 1.4 print(-7/5) # -1.4
编码问题
python 2 中默认的字符串类型是 ASCII,python 3 中默认的字符串类型是 Unicode:
# python 2 print type('string') # <type 'str'> print type(b'string byte') # <type 'str'> # python 3 print(type('string')) # <class 'str'> print(type(b'string byte')) # <class 'bytes'>
python 2 也支持 Unicode:
# python 2 print type('string') # <type 'str'> print type(u'string unicode') # <type 'unicode'> # python 3 print(type('string')) # <class 'str'> print(type(u'string unicode')) # <class 'str'>
xrange
python 2 中 range() 返回一个list,xrange() 返回一个 xrange 对象(迭代器);使用 xrange() 在计算大范围时可以更加节省内存;
python 3 中不存在 xrange(),只有 range() 也就是 python 2 中的 xrange()。
抛出异常
# python 2 raise IOError, 'file error' raise IOError('file error') # pyhton 3 raise IOError, 'file error' # SyntaxError raise IOError('file error')
异常处理
python 3 中 as 关键字时必须的,不可以省略
# python 2 可以正常执行 # python 3 报错:SyntaxError try: 1/0 except ZeroDivisionError, err: print(err) # python 3 写法: except ZeroDivisionError as err
next
python 2 中同时存在 next() 和 .next(),而 python 3 仅保留 next():
# python 2 generator = (letter for letter in "abcdefg") next(generator) # a generator.next() # b # python 3 generator = (letter for letter in "abcdefg") next(generator) # a generator.next() # AttributeError
for循环变量和全局命名空间
python 3 中 for 循环的变量不会泄漏到全局命名空间。
# python 2 i = 1 print "before: i=", i # before: i=1 print "comprehension: ", [i for i in range(5)] # comprehension: [0, 1, 2, 3, 4] print "after: i=", i # after: i=4 # python 3 i = 1 print "before: i=", i # before: i=1 print "comprehension: ", [i for i in range(5)] # comprehension: [0, 1, 2, 3, 4] print "after: i=", i # after: i=1
input()
python 2 中,输入有两个函数 input() 和 raw_input();
python 3 中仅保留 input() ,功能同 raw_input() ,输入对象类型始终保存为 str;
码字很辛苦,转载请注明来自ChenJiehua的《python2与python3的几点小区别》
2018-05-05 2018-05-05 python
评论