📜  Python2 与 Python3 |语法和性能比较

📅  最后修改于: 2022-05-13 01:55:05.881000             🧑  作者: Mango

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
它同时具有rangexrange函数。当你需要一次迭代一个对象时,使用 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