Python2.x 与Python3.x 的区别

1. print

py2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印
py3:print函数,函数就以为这必须要加上括号才能调用,如果接元组对象,可以接收多个位置参数,并可以打印

如果希望在 Python2 中 把 print 当函数使用,那么可以导入 future 模块 中的 print_function

下面有个示例:

# py2
from __future__ import print_function
print("hello", "world")
hello world

2. 输入函数

py2:input_raw()
py3:input()

3. super() - 类的继承时调用父类的一个方法

py2:必须显示的在参数中写上基类

class A(object):   # Python2.x 记得继承 object
    pass
class B(A):
    def add(self, x):
        super(B, self).add(x)

py:直接无参数调用即可

class A:
    pass
class B(A):
    def add(self, x):
        super().add(x)

4. 1/2的结果

py2:返回0
py3:返回0.5,没有了int和long的区别

5. 编码

py2:默认编码ascii
py3:默认编码utf-8
而且为了在py2中使用中文,在头部引入coding声明,不推荐使用

6. 字符串

https://www.cnblogs.com/dcotorbool/p/8117031.html
py2:unicode类型表示字符串序列,str类型表示字节序列
py3::str类型表示字符串序列,bytes类型表示字节序列

7. True和False

py2:true 和 false (首字母小写)在 Python2 中是两个全局变量,可以为其赋值或者进行别的操作,初始数值分别为1和0,虽然修改是违背了python设计的原则,但是确实可以更改
py3:True 和 False 修正了这个变量,让True或False不可变

8. 迭代器 ??? -->待验证

py2:当中许多返回列表的方法,如range,字典对象的 dict.keys()、dict.values() 方法, map、filter、zip;并且迭代器必须实现next方法
py3:将返回列表的方法改为了返回迭代器对象,内置了next,不用特意去实现next

9. nonlocal

py2:没有办法在嵌套函数中将变量声明为一个非局部变量,只能在函数中声明全局变量
py3:nonlocal方法实现了,示例如下:

def func():
    c = 1
    def foo():
        c = 12
    foo()
    print(c)
func()    #1
def func():
    c = 1
    def foo():
        nonlocal c
        c = 12
    foo()
    print(c)
func()   # 12

你可能感兴趣的:(Python2.x 与Python3.x 的区别)