python2与python3的主要区别

  • print

    py2:print语句,意味着可以直接跟要打印的东西,如果后面接的是一个元祖对象,直接打印

    py3:print函数,必须加上括号才能调用,如果接元组对象,可以接受多个位置参数并打印

    如果在python2中把print当函数使用,可以导入future模块中的print_function

  • 输入函数

    py2:input_raw()

    py3:input()

  • super()

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

    py3:直接无参数调用即可

  • 1/2的结果(整数除法)

    py2:返回0(整数)

    py3:返回0.5(默认返回小数),没有了int和long的区别

  • 编码

    py2:默认ascii(开头要引入coding声明)

    py3:默认utf-8

  • 字符串

    py2:unicode类型表示字符串序列,srt类型表示字节序列

    py3:str类型表示字符串序列,byte类型表示字节序列

  • True和False

    py2:True和False是两个全局变量,可以对其进行赋值或别的操作,初始数值分别为1和0,

    py3:True和False不可变

  • 迭代器

    py2:当中许多返回列表的方法,如range,字段对象的dict.keys()、dict.values()方法,map、filter、zip;并且迭代器必须实现next方法

    py3:将返回列表的方法改为了迭代器对象,内置的__next___方法,不用特意去实现next

  • 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
  • 新、旧式类

    py2:必须显性继承object才是新式类,否则是旧式类

    新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索

    py3:没有了旧式类,只有新式类

  • exec

    py2:exec语句

    py3:exec函数

  • min/max函数

    py2:列表里面有None也可以使用min\max比较

    py3:列表中所有元素必须是可比较的(即不是None)

  • 虚拟变量

    py2:如果使用列表推导式如a = [i for i in range(10)],我们得到结果,而i变量留在内存当中,如果在下面部分的代码再使用i变量,会导致不可见的错误

    py3:不会出现上面这种情况,因为内存中不再保存变量i

  • 模块改名或删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值