Python2 与 Python3 |语法和性能比较
十多年来, Python 2.x 一直是最受欢迎的版本。但现在越来越多的人转向Python 3.x。 Python3 比 Python2 好很多,并带有许多附加功能。此外, Python 2.x 今年也将过时。因此,现在建议从现在开始使用Python 3.x。
还在为难吗?
有没有想过他们两个有什么区别?让我们在下面找到这个东西。
首先,让我们通过这张图片进行快速比较,这将使您对预期的结果有一个公平的了解。
打印声明
Python 2.7 :额外的括号不是强制性的。
print 'Hello and welcome to GeeksForGeeks'
Python 3.x :额外的括号是强制性的。
print ('Hello and welcome to GeeksForGeeks')
整数除法
Python2.7 :
除法 (/) 操作的返回类型取决于其操作数。如果两个操作数都是 int 类型,则执行地板除法并返回一个 int。如果任一操作数是浮点数,则执行经典除法并返回浮点数。无论操作数是什么,还提供了 //运算符来进行地板除法。
print 5 / 2
print -5//2
# Output:
# 2
# -3
Python 3.x :
除法 (/) 始终返回一个浮点数。要进行地板除法并获得整数结果(丢弃任何小数结果),您需要使用 //运算符。
print (-5 / 2)
print (5//2)
# Output:
# -2.5
# 2
输入函数
Python2.7 :
当您使用 input()函数时, Python会根据您的输入自动转换数据类型。
val1 = input("Enter any number: ")
val2 = input("Enter any string: ")
type(val1)
type(val2)
raw_input
将输入作为文本(即输入的字符)获取,但它不会尝试将它们转换为其他任何内容;即它总是返回一个字符串。
val1 = raw_input("Enter any number: ")
val2 = raw_input("Enter any string: ")
type(val1)
type(val2)
Python 3.x
在 Python3 中,输入函数的行为类似于Python 2.7 中的raw_input ,它始终返回字符串类型。
val1 = input("Enter any number: ")
val2 = input("Enter any string: ")
type(val1)
type(val2)
# In order to fix this you need to apply
# float() function when user is prompted for input.
圆形函数
Python 2.7 :输出总是产生一个浮点数。
print(round(69.9))
print(round(69.4))
# Output:
# 70.0
# 69.0
Python 3.x :返回结果为 n 位精度。
print(round(69.9))
print(round(69.4))
# Output:
# 70
# 69
列出理解
Python 2.7 :参考下面的例子,全局变量如何变化。
num = 7
print (num)
mylist = [num for num in range(100)]
print (num)
# Output:
# 7
# 99
Python 3.x :现在没有命名空间泄漏。这现在已经很固定了。
num = 7
print (num)
mylist = [num for num in range(100)]
print (num)
# Output:
# 7
# 7
范围函数
Python2.7 :
它同时具有range
和xrange
函数。当你需要一次迭代一个对象时,使用 xrange ,当你需要一个实际的列表时,使用 range 函数。 xrange 通常更快并节省内存。
% timeit [i for i in range(1000)]
% timeit [i for i in xrange(1000)]
Python 3.x :
这里 range 的作用与Python 2.7 中的 xrange 相同。 xrange 在Python 3.x 中不起作用。
% timeit [i for i in range(1000)]
% timeit [i for i in xrange(1000)]
异常处理
Python 2.7 :这与Python 3.x 的语法不同。
try:
YoYo
except NameError, error:
print error, "YOU HAVE REACHED FOR AN ERROR"
try:
YoYo
except NameError as error:
print error, "YOU HAVE REACHED AN ERROR, YET AGAIN !"
Python 3.x :需要包含“As”关键字。
try:
YoYo
except NameError as error:
print (error, "THE ERROR HAS ARRIVED !")
列出理解
Python 2.7 :比Python 3.x 少括号。
[item for item in 1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
Python 3.x :这里需要额外的括号。
[item for item in (1, 2, 3, 4, 5)]
[1, 2, 3, 4, 5]
next()函数和 .next() 方法
Python 2.7 :这里使用了 next() 和 .next()。
generator = (letter for letter in 'abcdefg')
next(generator)
generator.next()
Python 3.x :这里只使用了 next()。使用 .next() 会显示 AttributeError。
generator = (letter for letter in 'abcdefg')
next(generator)
ASCII、Unicode 和字节类型
Python 2.7 :它有 ASCII字符串类型,一个单独的 unicode 类型,但没有字节类型。
type(unicode('a'))
type(u'a')
type(b'a')
Python 3.x :我们有 unicode字符串和字节类型。
type(unicode('a'))
# This returns an error
注意: Python 3.x 中不再返回列表的方法和函数列表。
In Python2.x -
zip()
map()
filter()
dictionary’s .keys() method
dictionary’s .values() method
dictionary’s .items() method