python2.x和python3.x不一样的地方

sort和sorted的变化
python3中已经移除了cmp这个关键字参数
在这里插入图片描述
在这里插入图片描述
生成器中的next函数的变化
在这里插入图片描述
在python3中,False和True是真正的保留字,而不是被定义在内置模块的名字空间(builtins)的名字。
True和False在Python2中是两个全局变量,数值上对应1和0,既然是变量就可以被赋值,但这样容易造成混乱;故在Python3中 True和False变为两个关键字,永远指向两个固定对象,不允许被重新赋值。
python2中:

>>> True+=1
>>> True
2
>>>

python3中:

>>> True+=1
  File "<stdin>", line 1
SyntaxError: can't assign to keyword
>>>

nonlocal
在Python2中可以在函数中使用global声明变量为全局变量,但是给一个变量声明为非局部变量是无法实现的。在Python3,新增了关键字nonlocal,使得定义非局部变量成为了可能。

def func():
    c = 1
    def foo():
        c = 12
    foo()
    print(c)
func()  #1
def func():
    c = 1
    def foo():
        nonlocal c
        c = 12
    foo()
    print(c)
func()  # 12

python3舍弃了xrange,只有range了,而python2将两个都保留
python2中,xrange得到的是一个生成器对象:

>>> test1=range(5)
>>> test1
[0, 1, 2, 3, 4]
>>> test2=xrange(5)
>>> test2
xrange(5)
>>> type(test1),type(test2)
(<type 'list'>, <type 'xrange'>)
>>>

python3中,range() 函数返回的是一个可迭代对象:

>>> test1=range(5)
>>> test1
range(0, 5)
>>> type(test1)
<class 'range'>
>>> test1=xrange(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'xrange' is not defined
>>>

迭代器 iterator 的 next()函数被 Python3 废弃,统一使用 next(iterator)
字典变量的 has_key 函数被 Python 废弃,统一使用 in 关键词
python2中:

>>> test={'a':123,'b':321}
>>> test.has_key('a')
True

python3中:

>>> test={'a':123,'b':321}
>>> test.has_key('a')
True

input和raw_input的区别
input: python2中input需要用户指定输入的类型,以下代码体现了这点

>>> x=input('>>:')
>>:23
>>> type(x)
<type 'int'>
>>> x=input('>>:')
>>:'liyuanchao'
>>> type(x)
<type 'str'>
>>>

python2中的raw_input与python3中的input效果相同无须指定类型,均为字符型,python3中已经舍弃raw_input

#在python2中有raw_input与python3的input是一个意思
#特点是:把所有用户的输入都转成字符串类型
#python2:
username=raw_input('please input your name: ')
print(username,type(username))


#python3:
#username=input('请输入你的用户名:')
#print(username,type(username))

Python 3.x print函数代替了print语句,与之类似的还有exec
在 Python2.x 中,输出数据使用的是 Print 语句,例如:

>>> print "3,4"
3,4
或者
>>> print(3,4)
(3,4)

但是在 Python 3.x 中,print 语句没有了,取而代之的是 print 函数,例如:

>>> print(3,4)
3 4

如果还像 Python 2.x 中那样使用 print 语句,Python 编译器就会报错,例如:

>>> print "3,4"
  File "<stdin>", line 1
    print "3,4"
              ^
SyntaxError: Missing parentheses in call to 'print'

Python 3.x 默认使用 UTF-8 编码

相比 Python 2.x 默认采用的 ASCII 编码,Python 3.x 默认使用 UTF-8 编码,可以很好地支持中文或其它非英文字符。

例如,输出一句中文,使用 Python 2.x 和 Python 3.x 的区别如下:

#Python 2.x
>>>str ="C语言中文网"
>>>str
'C\xe8\xaf\xad\xe8\xa8\x80\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91'

#Python 3.x
>>>str ="C语言中文网"
>>>str
'C语言中文网'

不仅如此,在 Python 3.x 中,下面的代码也是合法的:

>>>中国="China"
>>>print(中国)
China

Python 3.x 除法运算
和其他语言相比,Python 的除法运算要高端很多,它的除法运算包含 2 个运算符,分别是 / 和 //,这 2 个运算符在 Python 2.x 和 Python 3.x 的使用方法如下:
/ 运算符
在 Python 2.x 中,使用运算符 / 进行除法运算的方式和 Java、C 语言类似,整数相除的结果仍是一个整数,浮点数除法会保留小数点部分,例如:

>>>1/2
0
>>>1.0/2
0.5

但是在 Python 3.x 中使用 / 运算符,整数之间做除法运算,结果也会是浮点数。例如:

>>>1/2
0.5
>>> 1/2
0.5
>>> import math
>>> 1/2
0.5
>>> math.ceil(1/2)
1
>>> math.floor(1/2)
0
>>>

运算符 //
使用运算符 // 进行的除法运算叫做 floor 除法,也就是输出不大于结果值的一个最大的整数(向下取整)。此运算符的用法在 Python 2.x 和Python 3.x 中是一样的,举个例子:

#Python 2.x
>>> -1//2
-1

#Python 3.x
>>> -1//2
-1

Python 3.x 异常

  • 在 Python 3.x 版本中,异常处理改变的地方主要在以下几个方面:
  • 在 Python 2.x 版本中,所有类型的对象都是直接被抛出的,但是在 Python 3.x 版本中,只有继承 BaseException 的对象才可以被抛出。
  • 在 Python 2.x 版本中,捕获异常的语法是“except Exception,var:”;但在 Python 3.x 版本中,引入了 as 关键字,捕获异常的语法变更为 “except Exception as var:”。
  • 在 Python 3.x 版本中,处理异常用 “raise Exception(args)”代替了“raise Exception,args”。
  • Python 3.x 版本中,取消了异常类的序列行为和 .message 属性。

有关 Python 2.x 版本和 Python 3.x 版本处理异常的示例代码如下所示:

#Python 2.x
>>> try:
...  raise TypeError,"类型错误"
... except TypeError,err:
...  print err.message
...
类型错误

#Python 3.x
>>> try:
...     raise TypeError("类型错误")
... except TypeError as err:
...     print(err)
...
类型错误

Python 3.x 八进制字面量表示
在 Python 3.x 中,表示八进制字面量的方式只有一种,并且必须写成“0o1000”这样的方式,原来“01000”的方式不能使用了。举个例子:

#Python 2.x
>>> 0o1000
512
>>> 01000
512

#Python 3.x
>>> 01000
  File "<stdin>", line 1
    01000
        ^
SyntaxError: invalid token
>>> 0o1000
512

Python 3.x 不等于运算符
Python 2.x 中的不等于运算符有 2 种写法,分别为 != 和 <>,但在 Python 3.x 中去掉了 <>,只有 != 这一种写法,例如:

#Python 2.x
>>> 1!=2
True
>>> 1<>2
True

#Python 3.x
>>> 1!=2
True
>>> 1<>2
  File "<stdin>", line 1
    1<>2
      ^
SyntaxError: invalid syntax

Python 3.x 数据类型
Python 3.x 中对数据类型也做了改动,比如说:

  • Python 3.x 去除了 long 类型,现在只有一种整形 int,但它的行为就像是 Python 2.x 版本中的 long。
  • Python 3.x 新增了 bytes 类型,对应 Python 2.x 版本的八位串,定义 bytes 字面量的方法如下所示:
>>>b=b'China'
>>>type(b)
<type 'bytes'>

字符串对象和 bytes 对象可以使用 .encode() 或者 .decode()方法相互转化,例如:

>>>s=b.decode()
>>>s
'China'
>>>b1=s.encode()
>>>b1
b'China'

Python 3.x 中,字典的 keys()、items() 和 values() 方法用返回迭代器,且之前的 iterkeys() 等函数都被废弃。同时去掉的还有 dict.has_key(),改为用 in 替代。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值