Python3 和Python2有什么区别

125 阅读2分钟

Python 3 和 Python 2 之间有许多重要的区别,以下是一些主要的差异:

1. 打印语法

  • Python 2: print 是一个语句,不需要括号。
    print "Hello, world!"
    
  • Python 3: print 是一个函数,必须使用括号。
    print("Hello, world!")
    

2. 整数除法

  • Python 2: 默认的除法行为对于整数类型是地板除(向下取整)。
    3 / 2  # 结果是 1
    
  • Python 3: 默认的除法行为返回浮点数结果。
    3 / 2  # 结果是 1.5
    
    如果需要地板除,可以使用 // 操作符。

3. Unicode 字符串

  • Python 2: 字符串是字节串(str),如果想要使用 Unicode 字符串,需要在字符串前加 u 前缀。
    s = u"Hello"
    
  • Python 3: 默认字符串类型是 Unicode,不需要特殊标记。
    s = "Hello"
    

4. xrangerange

  • Python 2: range 返回一个列表,xrange 返回一个生成器(迭代器),适用于较大的序列。
    range(3)  # 返回列表 [0, 1, 2]
    xrange(3)  # 返回生成器
    
  • Python 3: range 返回一个生成器,xrange 被移除。
    range(3)  # 返回生成器
    

5. 错误处理(异常捕获)

  • Python 2: 使用 except 语法时,捕获异常需要用逗号。
    try:
        1 / 0
    except ZeroDivisionError, e:
        print(e)
    
  • Python 3: 异常捕获语法改为 as
    try:
        1 / 0
    except ZeroDivisionError as e:
        print(e)
    

6. 标准库变化

  • Python 3: 一些模块和方法的名称发生了变化,某些库被重命名或重新组织。
    • 例如,urllib, urllib2 被合并为 urllib
    • ConfigParser 被改为 configparser
    • StringIO 被移到 io 模块中。

7. input() 函数

  • Python 2: input() 会执行输入的代码,raw_input() 是接收字符串的输入。
    name = raw_input("Enter your name: ")
    
  • Python 3: input() 始终返回字符串,移除了 raw_input()
    name = input("Enter your name: ")
    

8. next() 函数

  • Python 2: 使用 iterator.next() 来获取下一个元素。
    it = iter([1, 2, 3])
    it.next()  # 返回 1
    
  • Python 3: 使用 next() 函数来获取下一个元素。
    it = iter([1, 2, 3])
    next(it)  # 返回 1
    

9. 输入输出

  • Python 2: 使用 print 语句输出,没有标准的 flush 参数。
  • Python 3: print() 函数支持 flush 参数,用于刷新输出缓冲区。

10. 字典和迭代器

  • Python 2: dict.keys(), dict.items()dict.values() 返回的是列表。
  • Python 3: 返回的是视图对象(iterable),而不是列表。
    my_dict = {'a': 1, 'b': 2}
    my_dict.keys()  # 返回 dict_keys,而不是列表
    

11. 函数返回值注解

  • Python 3: 引入了函数的类型注解,可以指定函数参数和返回值的类型。
    def add(a: int, b: int) -> int:
        return a + b
    

12. 支持的新特性

  • Python 3: 引入了许多新特性,如 asyncio(异步编程)、f-string 字符串格式化、type hinting 等。

总结

Python 3 进行了许多语言改进和优化,修复了 Python 2 中的一些设计缺陷,强化了 Unicode 支持,并引入了许多新特性。因此,Python 3 被认为是未来的标准,建议新项目都使用 Python 3,Python 2 自 2020 年 1 月 1 日起停止官方支持。