首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 2.x和Python 3.x之间的重要区别与示例

# https://www.geeksforgeeks.org/division-operator-in-python/

Division operator

如果我们移植我们的代码或在python 2.x中执行python 3.x代码,如果整数除法更改未被注意(因为它不会引发任何错误),这可能会很危险。在移植代码时,最好使用浮动值(如7.0 / 5或7 / 5.0)来获得预期的结果。

print 7 /5

print -7 /5

'''

Output in Python 2.x

1

-2

Output in Python 3.x :

1.4

-1.4

# Refer below link for details

# https://www.geeksforgeeks.org/division-operator-in-python/

print function

这是最着名的变化。在这里,Python 2.x中的print函数被Python 3.x中的print()函数替换,即,要在Python 3.x中打印,需要额外的一对括号。

print'Hello, Geeks' # Python 3.x doesn't support

print('Hope You like these facts')

'''

Output in Python 2.x :

Hello, Geeks

Hope You like these facts

Output in Python 3.x :

File "a.py", line 1

print 'Hello, Geeks'

^

SyntaxError: invalid syntax

Refer below link for details

https://www.geeksforgeeks.org/g-fact-25-print-single-multiple-variable-python/

Unicode:

在Python 2中,隐式str类型是ASCII。但在Python 3.x中,隐式str类型是Unicode。

print(type('default string '))

print(type(b'string with b '))

'''

Output in Python 2.x (Bytes is same as str)

Output in Python 3.x (Bytes and str are different)

Python 2.x也支持Unicode

print(type('default string '))

print(type(u'string with b '))

'''

Output in Python 2.x (Unicode and str are different)

Output in Python 3.x (Unicode and str are same)

'''

xrange:

Python 3.x中不存在Python 2.x的xrange()。在Python 2.x中,range返回一个列表,即range(3)返回[0,1,2],而xrange返回一个xrange对象,即xrange(3)返回iterator对象,它与Java迭代器类似,并在需要时生成数字。

如果我们需要多次迭代相同的序列,我们更喜欢range(),因为range提供了一个静态列表。xrange()每次重建序列。xrange()不支持切片和其他列表方法。xrange()的优点是,当任务迭代大范围时,它可以节省内存。

在Python 3.x中,范围函数现在执行xrange在Python 2.x中的功能,因此为了保持代码的可移植性,我们可能希望坚持使用范围。所以Python 3.x的范围函数是来自Python 2.x的xrange。

forx in xrange(1, 5):

print(x),

forx in range(1, 5):

print(x),

'''

Output in Python 2.x

1 2 3 4 1 2 3 4

Output in Python 3.x

NameError: name 'xrange' is not defined

'''

Error Handling:

两个版本的错误处理都有一个小的变化。在python 3.x中,'as'关键字是必需的。

try:

trying_to_check_error

exceptNameError, err:

print err, 'Error Caused' # Would not work in Python 3.x

'''

Output in Python 2.x:

name 'trying_to_check_error' is not defined Error Caused

Output in Python 3.x :

File "a.py", line 3

except NameError, err:

^

SyntaxError: invalid syntax

'''

try:

trying_to_check_error

exceptNameError as err: # 'as' is needed in Python 3.x

print (err, 'Error Caused')

'''

Output in Python 2.x:

(NameError("name 'trying_to_check_error' is not defined",), 'Error Caused')

name 'trying_to_check_error' is not defined Error Caused

'''

_future_module:

这基本上不是两个版本之间的区别,但在这里提到有用的东西。__future__模块的想法是帮助迁移。我们可以使用Python 3.x

如果我们在2.x代码中规划Python 3.x支持,我们可以在我们的代码中输入_future_。

例如,在Python 2.x代码下面,我们使用__future__模块使用Python 3.x的整数除法行为

# In below python 2.x code, division works

# same as Python 3.x because we use __future__

from__future__ import division

print7 / 5

print -7 /5

输出:

1.4 -1.4我们使用__future__模块在Python 2.x中使用括号的另一个例子

from__future__ import print_function

print('GeeksforGeeks')

输出:

GeeksforGeeks

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181102A04QW800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券