python2.x和python3.x的版本区别
Python 3.x 版本相对于Python的早期版本,是一个较大的升级;许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。
Python 3.0 的变化主要体现在以下几个方面:
1. print()函数
Python 2 中的print语句没有了,取而代之的是print()函数
在Python2.6和Python2.7中,这三种形式是等价的
print "fish"
print ("fish") # print后面有个空格
print("fish") # print()不能带任何其他参数
2. Unicode
python 2 默认支持ASCII编码,是不支持中文的;而Python 3 中默认是utf-8编码,可以识别中文;
Python 2.x中:
>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'
Python 3.x中:
>>> str = "啊哈哈哈"
>>> str
'啊哈哈哈'
3. 异常
python 3 中捕获异常的语法由 except Exception,e 改成 except Exception as e
在2.x时代,所有类型的对象都可以直接被抛出;但在3.x时代,只有继承自BaseException的对象才可以被抛出,而且会让异常变得更为专一,只有在错误发生的情况才能用异常捕获语句来处理。
4. xrange
在Python 2 中 xrange() 是列表,它创建迭代对象的用法是非常流行的。比如:for 循环或者是列表/集合/字典推导式。这个表现十分像生成器。但这个 xrange-iterable 是无穷的,意味着可以无限遍历。由于它的惰性求值,xrange() 函数 比 range() 更快。尽管如此,对比迭代一次,不建议重复迭代多次,因为生成器每次都从头开始。
在Python 3 中,range是可迭代对象;range()是像 xrange() 那样实现,在 Python 3 中 xrange() 会抛出命名异常。
5. 不等运算符
Python 2.x 中的不等于有两种写法: != 和 <>
Python 3.x 中去掉了 <>,只有一种 != 写法
6. 数据类型
Python 3.x 去除了long类型,只有一个int类型,但它的行为就像是 2.x 版本的long;而且新增了bytes类型
str对象和bytes对象可以用 .encode(str -> bytes) 或 .decode(bytes -> str)方法实现相互转化
7. raw_input() 和 input()
Python 2 有两个全局函数,用在命令行请求用户输入
第一个是:input(),等待用户输入python表达式,然后返回结果;
第二个是:raw_input(),用户输入什么内容就返回什么
8. 全局函数CALLABLE()
Python 2 中可以使用全局函数callable()来检查一个对象是否可调用;而在Python 3 中,这个全局函数被取消了,为了检查一个对象是否可调用,可以检查特殊方法__call__()的存在性