zoukankan      html  css  js  c++  java
  • python2和python3的差异

    核心类差异

    Python3对Unicode字符的原生支持

    Python2中使用 ASCII 码作为默认编码方式导致string有两种类型str和unicode,Python3只支持unicode的string。python2和python3字节和字符对应关系为:

    编码&字符串

    • 字符串:
      py2:
      unicode v = u"root" 本质上用unicode存储(万国码)
      (str/bytes) v = "root" 本质用字节存储
      py3:
      str v = "root" 本质上用unicode存储(万国码
      bytes v = b"root" 本质上用字节存储
    • 编码:
        py2: ascii 文件头可以修改:#-- encoding:utf-8 --
         py3: utf-8 文件头可以修改:#-- encoding:utf-8 --

    Python3采用的是绝对路径的方式进行import

    Python2中相对路径的import会导致标准库导入变得困难(想象一下,同一目录下有file.py,如何同时导入这个文件和标准库file)。Python3中这一点将被修改,如果还需要导入同一目录的文件必须使用绝对路径,否则只能使用相关导入的方式来进行导入。

    Python2中存在老式类和新式类的区别

    Python3统一采用新式类。新式类声明要求继承object,必须用新式类应用多重继承。

    Python3使用更加严格的缩进。

    Python2的缩进机制中,1个tab和8个space是等价的,所以在缩进中可以同时允许tab和space在代码中共存。这种等价机制会导致部分IDE使用存在问题。Python3中1个tab只能找另外一个tab替代,因此tab和space共存会导致报错:TabError: inconsistent use of tabs and spaces in indentation.

    废弃类差异

    • print语句被python3废弃,统一使用print函数

    • exec语句被python3废弃,统一使用exec函数

    • execfile语句被Python3废弃,推荐使用exec(open("./filename").read())

    • 不相等操作符"<>"被Python3废弃,统一使用"!="

    • long整数类型被Python3废弃,统一使用int

    • xrange函数被Python3废弃,统一使用range,Python3中range的机制也进行修改并提高了大数据集生成效率

    Python3中这些方法再不再返回list对象:dictionary关联的keys()、values()、items(),zip(),map(),filter(),但是可以通过list强行转换:

    mydict={"a":1,"b":2,"c":3}
    mydict.keys()  #<built-in method keys of dict object at 0x000000000040B4C8>
    list(mydict.keys()) #['a', 'c', 'b']
    

    迭代器iterator的next()函数被Python3废弃,统一使用next(iterator)

    raw_input函数被Python3废弃,统一使用input函数

    字典变量的has_key函数被Python废弃,统一使用in关键词

    file函数被Python3废弃,统一使用open来处理文件,可以通过io.IOBase检查文件类型

    apply函数被Python3废弃

    异常StandardError 被Python3废弃,统一使用Exception

    修改类差异

    浮点数除法操作符/和//区别

    • Python2:/是整数除法,//是小数除法
    • Python3:/是小数除法,//是整数除法。

    异常抛出和捕捉机制区别

    Python2

    • raise IOError, "file error" #抛出异常
    • except NameError, err: #捕捉异常

    Python3

    • raise IOError("file error") #抛出异常
    • except NameError as err: #捕捉异常

    for循环中变量值区别

    Python2,for循环会修改外部相同名称变量的值

    i = 1
    print ('comprehension: ', [i for i in range(5)])
    print ('after: i =', i  ) #i=4
    

    Python3,for循环不会修改外部相同名称变量的值

    i = 1
    print ('comprehension: ', [i for i in range(5)])
    print ('after: i =', i  ) #i=1
    

    round函数返回值区别

    Python2,round函数返回int类型值

    isinstance(round(15.5),int) #True
    

    Python3,round函数返回float类型值

    isinstance(round(15.5),float) #True
    

    比较操作符区别

    Python2中任意两个对象都可以比较

    # Python2中任意两个对象都可以比较
    11 < 'test' # True
    # Python3中只有同一数据类型的对象可以比较    
    11 < 'test' # TypeError: unorderable types: int() < str()
    
  • 相关阅读:
    查询oracle数据库里面所有的表名
    mysql 触发器 trigger用法 four
    mysql 触发器 trigger用法 three (稍微复杂的)
    mysql 触发器 trigger用法 two (稍微复杂的)
    腾讯云SSL证书+阿里云负载均衡实现https转https
    关于redis  WARNING overcommit_memory is set to 0 的问题解决
    腾讯云申请免费ssl证书(1年有效期)
    阿里云创建负载均衡
    Go语言循环语句
    Go语言条件语句
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/11723124.html
Copyright © 2011-2022 走看看