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__()的存在性

 

posted @ 2019-07-11 16:40  DF-包子  阅读(2277)  评论(0编辑  收藏  举报