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 -*-

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

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

  2. Python2中存在老式类和新式类的区别,Python3统一采用新式类。新式类声明要求继承object,必须用新式类应用多重继承。
  3. Python3使用更加严格的缩进。Python2的缩进机制中,1个tab和8个space是等价的,所以在缩进中可以同时允许tab和space在代码中共存。这种等价机制会导致部分IDE使用存在问题。Python3中1个tab只能找另外一个tab替代,因此tab和space共存会导致报错:TabError: inconsistent use of tabs and spaces in indentation.

废弃类差异


  1. print语句被python3废弃,统一使用print函数
  2. exec语句被python3废弃,统一使用exec函数
  3. execfile语句被Python3废弃,推荐使用exec(open("./filename").read())
  4. 不相等操作符"<>"被Python3废弃,统一使用"!="
  5. long整数类型被Python3废弃,统一使用int
  6. xrange函数被Python3废弃,统一使用range,Python3中range的机制也进行修改并提高了大数据集生成效率
  7. 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‘]
  8. 迭代器iterator的next()函数被Python3废弃,统一使用next(iterator)
  9. raw_input函数被Python3废弃,统一使用input函数
  10. 字典变量的has_key函数被Python废弃,统一使用in关键词
  11. file函数被Python3废弃,统一使用open来处理文件,可以通过io.IOBase检查文件类型
  12. apply函数被Python3废弃
  13. 异常StandardError 被Python3废弃,统一使用Exception

修改类差异

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

    • Python2:/是整数除法,//是小数除法
    • Python3:/是小数除法,//是整数除法。
  2. 异常抛出和捕捉机制区别
    • Python2
    raise IOError, "file error" #抛出异常
    except NameError, err:  #捕捉异常
    • Python3
    raise IOError("file error") #抛出异常
    except NameError as err: #捕捉异常
  3. 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
  4. round函数返回值区别
    • Python2,round函数返回int类型值
    isinstance(round(15.5),int) #True
    • Python3,round函数返回float类型值
    isinstance(round(15.5),float) #True
  5. 比较操作符区别
    • Python2中任意两个对象都可以比较
    11 < ‘test‘ #True
    • Python3中只有同一数据类型的对象可以比较    
    11 < ‘test‘ # TypeError: unorderable types: int() < str()


原文地址:https://www.cnblogs.com/feifeifeisir/p/9599218.html

时间: 2024-08-28 19:28:14

python2和python3的差异的相关文章

python2 到 python3 转换工具 2to3

windows系统下的使用方法: (1)将python安装包下的Tools/Scripts下面的2to3.py拷贝到需要转换文件目录中. (2)dos切换到需要转换的文件目录下,运行命令2to3.py test.py 可打印test.py,在python2与python3的差异. (3)dos切换到需要转换的文件目录下,运行命令2to3.py -w test.py 将test.py备份为test.py.bak文件 test.py将相应的格式及相应包改写为python3 恭喜你,python2到p

Python2和Python3的一些语法区别

Python2和Python3的一些语法区别 python Python2和Python3的一些语法区别 1.print 2.input 3. python3版本相对2版本的部分其他区别 问题:为何会出现乱码的情况 问题:如何获取编码方式的信息? 问题:在控制台上看到的到底是什么? 1.print 在版本2的使用方法是: print 'this is version 2 也可以是 print('this is version 2') 但到了3,就只能加上括号,像一个函数一样来使用 print:

Python2和Python3中print的不同点

在Python2和Python3中都提供print()方法来打印信息,但两个版本间的print稍微有差异 主要体现在以下几个方面: 1.python3中print是一个内置函数,有多个参数,而python2中print是一个语法结构: 2.Python2打印时可以不加括号:print 'hello world', Python3则需要加括号   print("hello world") 3.Python2中,input要求输入的字符串必须要加引号,为了避免读取非字符串类型发生的一些行为

初学者学习python2还是python3?

如果你是一个初学者,或者你以前接触过其他的编程语言,你可能不知道,在开始学习python的时候都会遇到一个比较让人很头疼的问题:版本问题!!是学习python2 还是学习 python3 ?这是非常让人纠结的! 搜索一下便会发现python3 和 python2 是不兼容的,而且差异比较大,到底学习哪个版本呢?下面就来为大家分析一下: 其实python是linux上最常用的软件之一,但是linux目前的版本大部分还是使用python2的,而且,在linux上依赖python2的程序更多一些,所以

Python - Python2与Python3的对比、转换与兼容

对比 Python2.x与Python3.x版本区别:http://www.runoob.com/python/python-2x-3x.html 示例解读Python2和Python3之间的主要差异:https://www.oschina.net/news/99235/difference-between-python2-and-python-3 13个python3才能用的特性:https://mp.weixin.qq.com/s/eYeY2lcaPCsIIFOyZ6v-OQ 特别注意: 在

有关python2与python3中关于除的不同

有关python2与python3中关于除的不同 python中2版本与3版本关于除的处理还是有一些差异的. 在python 2.7.15中除(/)是向下取整的,即去尾法. 123/10 # 结果 12 128/10 # 结果 12 在python 3中除(/)是相对于2版本精确了一些,例如: print(123/10) # 结果 12.3 原文地址:https://www.cnblogs.com/ZN-225/p/10574748.html

python2与python3的区别齐全【整理】

本文链接:https://blog.csdn.net/pangzhaowen/article/details/80650478 展开 一.核心类差异1. Python3 对 Unicode 字符的原生支持.Python2 中使用 ASCII 码作为默认编码方式导致 string 有两种类型 str 和 unicode,Python3 只 支持 unicode 的 string.Python2 和 Python3 字节和字符对应关系为:2. Python3 采用的是绝对路径的方式进行 import

python2和python3中的编码问题

开始拾起python,准备使用python3, 造轮子的过程中遇到了编码的问题,又看了一下python3和python2相比变化的部分. 首先说个概念: unicode:在本文中表示用4byte表示的unicode编码,也是python内部使用的字符串编码方式. utf-8:在本文中指最少1byte表示的unicode编码方式 我在使用 if isinstance(key,unicode): key= key.encode('utf-8') 的时候,发现key值被转成了b'foo',b'bar'

python2 与 python3的区别总结

python2 与 python3的区别总结 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会将你的Python 2程序源文件作为输入,然后自动将其转换到Python 3的形式. 案例研究:将chardet移植到Python 3(porting chardet to Python 3)描述了如何运行这个脚本,然后展示了一些它不能自动修复的情况.这