Python 2.x 与 Python 3.x 的区别_简要说明Python 3.x 与 Python 2.x 主要不同点

本文简要介绍了Python 2.x与3.x的主要区别,包括print语句的使用,input函数的行为,range与xrange的区别,字符串处理,算术运算的差异,比较运算的变化,以及异常处理的更新。Python 3.x更现代且高效,但2.x在某些方面仍有广泛的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python初学者经常会问,应该学习哪个版本的Python。对于这个问题,从发展来说,应该学习 Python 3.x,但从历史来说,Python 2.x拥有广泛的优秀的第三方库,而且大部分Python库都同时支持Python 2.7.x和3.x版本的。有必要了解一下Python 2.x与Python 3.x 两个版本之间的主要区别。

一、print输出

python 2.x:

>>> print 'Hello  World!'
Hello  World!
>>>

python 3.x:

>>> print('Hello World!')
Hello World!
>>>

Python 2中的print语句后跟随字符串,而Python 3中是通过print()函数,将需要输出的对象作为函数的参数。在Python 2中使用print()也是可以的,但反过来在Python 3中想以Python2的形式不带括号调用print语句时,会触发SyntaxError。不过在Python 2的圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。print('a', 'b')输出('a', 'b')

print 换行和不换行区别:

python 2的print 不换行使用","即可:

my = 'abc'
print my,

python 3的print 不换行使用end="":

my = 'abc'
print(my,end="")

二、input输入

在Python 2中,input()接收数字(int/float等)类型,并返回输入的内容,会自动识别类型。为了避免读取非字符串类型会发生的一些危险行为,使用raw_input()代替input(),raw_input()接收字符串(str)类型,并返回str类型。

>>> my_number = input('请输入一个数字: ')
请输入一个数字: 567
>>> type(my_number)
<type 'int'>

>>> my_string = raw_input('请输入一个字符串: ')
请输入一个字符串: hello
>>> type(my_string)
<type 'str'>

Python 3 改进了input()函数,该函数总是将用户的输入存储为 str对象。

>>> my_number = input('请输入一个数字: ')
请输入一个数字: 567
>>> type(my_number)
<type 'str'>

三、range 与 xrange

在Python 2.x中,函数range(N)的意义在于生成一个0到N-1的数字列表。也可以得到其它的数字范围,range(N,M)的范围是从N到M-1。如果用for做循环,需要利用range()函数构造一个列表,从这个角度看用for … in …range()做单纯循环的效率相比while来说是比较低的。为解决这个问题,Python 2.x对单纯的循环可以使用xrange()函数。

>>> for i in xrange(1,100):
...    print i
...

xrange(1,100)产生一个1到99的循环范围,而并不产生列表,这样就提高了效率,所以若只需要产生循环范围就应该用for…in… xrange()循环。

在Python 3.x中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()range()函数在Python 3 中返回的是可迭代对象,而不像在Python 2 中返回列表。对象只遍历一次会节省很多内存,如果通过生成器多次迭代这些对象,效率就不高了。此时如果需要列表对象,可以通过Python 3的list()函数简单地将可迭代对象转成列表。另一个值得一提的是,在Python 3.x中,range有了一个新的__contains__方法。__contains__方法可以有效的加快Python 3.x中整数和布尔型的查找速度。

三、字符串

在Python 2.x中,没有字符类型,也没有字节类型,字符串以 8-bit 字符串存储,有基于ASCII编码的str类型,可通过单独的unicode()函数转成unicode编码的字符串类型。Python 2.x程序默认使用ASCII编码,如果需要使用中文,最简单的方法是在程序的第一行以注释的方式作以下标注:

# -*- coding:utf-8 -*-

#coding=utf-8

其含义是:本文件使用utf-8编码,utf-8支持多种文字,包括中文。要注意的是,即使使用了#coding=utf-8标记,程序代码中的所有非中文的部分也必须都用英文输入法输入。

Python 2.x使用一对反引号(位于键盘Tab键的上方、1键的左方),可以将数字类型的变量转换为字符串类型。str函数也可以将数字类型转换为字符串类型:

>>> a = 5
>>> h = 3
>>> print "Area is " + `area`
Area is 7.5
>>> print "面积是 " + str(area)
面积是 7.5
>>>

而在Python 3.x中,终于有了Unicode(utf-8)字符串,默认使用Unicode(utf-8)编码。Python 3.x已经不支持反引号了!

四、算术运算

在Python 2.x中,算术运算的对象必须是数值,但是有一个规则,即同型数据的计算只能获得同型的结果,例如1/2是两个整型数据计算,其结果就是0,不同数据类型进行算数运算,结果类型会跟随更复杂的数据类型。例如1.0/2的结果就是0.5

>>> print '3 / 2 =', 3 / 2
3 / 2 = 1
>>> print '3 // 2 =', 3 // 2
3 // 2 = 1
>>> print '3 / 2.0 =', 3 / 2.0
3 / 2.0 = 1.5
>>> print '3 // 2.0 =', 3 // 2.0
3 // 2.0 = 1.0
>>>

Python 3.x做了优化,整数相除的结果可以为小数,比如10/4的结果就为2.5而不是Python 2.x中的2。Python 3.x中若想整数相除得出整数的结果需要使用//运算符。

>>> print('3 / 2 =', 3 / 2)
3 / 2 = 1.5
>>> print('3 // 2 =', 3 // 2)
3 // 2 = 1
>>> print('3 / 2.0 =', 3 / 2.0)
3 / 2.0 = 1.5
>>> print('3 // 2.0 =', 3 // 2.0)
3 // 2.0 = 1.0
>>>

五、比较运算

python 2.x中,cmp(x,y)函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。

>>> x,y = 1,2
>>> cmp(x,y)
-1
>>> x,y = 1,1
>>> cmp(x,y)
0
>>> x,y = 2,1
>>> cmp(x,y)
1
>>>

在python3.x中,cmp()已经不存在了,如果需要实现比较功能,需要引入operator 模块,适合任何对象。

>>> import operator
>>> operator.eq('hello', 'abc')
False
>>> operator.eq('hello', 'hello');
True
>>>

六、触发异常与处理异常

1.触发异常

Python 2 支持新旧两种异常触发语法:

>>> raise IOError, "file error"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: file error
>>> raise IOError("file error")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: file error
>>>

Python 3只接受带括号的的语法:

>>> raise IOError("file error")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: file error
>>>

2.异常处理

Python 3中的异常处理有了一点变化。在except语句中必须使用“as”关键字。

Python 2:

>>> try:
...  myname
... except NameError, err:
...  print err, '--> error message'
... 
name 'myname' is not defined --> error message
>>>

python 3:

>>> try:
...  my-name
... except NameError as err:
...  print(err, '--> error message')
... 
name 'myname' is not defined --> error message
>>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值