zoukankan      html  css  js  c++  java
  • Python 2和3的区别

    Python 3.x介绍的一些Python 2不兼容的关键字和特性可以通过在Python 2的内部__future__模块导入。

    基本点,range,新式类,mro,asyncio。

    0,字符串类型统一,只有str和bytes(字节序列)。Python2 的默认编码是 asscii(原因在于 Python这门语言诞生的时候还没出现 Unicode),3默认编码是 utf-8。外部IO 拿到的都是bytes。

    1,print,3统一加小括号,在3中是一个系统调用函数,2不加,在2中是一个声明,而不是一个函数

    2,不强制所有类型从int 到str或从 visa 到 str,如果比较不同类型会抛出报错信息

    3,整数相除,在Python 2中,3/2的结果是整数,在Python 3中,结果则是浮点数

    4,在3中,变量前面加 * 号表示接收溢出值,且位置没有限制,但一定要放在关键字参数或者**前面。

    5,异常处理,在 3中现在使用as作为关键词,且可以对异常做异常链处理,一层一层向外抛出

    6,在3中for循环不会再导致命名空间泄漏。比如for循环之后的值会赋值到名字相同的全局变量。

    7,Python2 中的 range 和 xrange 函数合并成了 range,在2中,range返回一个list,xrange返回一个iterator。3中全部返回可迭代对象。应用如2中for循环的复杂度指数型增加,3中线形增加。

    8,字典不再支持has_key方法,使用in方法。

    9,nonlocal,声明非局部变量,从嵌套关系中依次向外寻找,不会声明全局变量。

    10, yield from,将生成器重构为子生成器,通过委托生成器使调用方和子生成器建立双向的联系,依次接收子生成器的返回值。在协程中可以将所有IO抛给子生成器处理。并保存函数之间的调用状态。

    11,asyncio模块,非常强大的模块。使用新的协同特性和保存的生成器状态来进行异步IO。coroutine对象,只需要声明async 和 await即可。

    12,标准库的添加,faulthandler,Display (limited) tracebacks;ipaddress,处理ip地址;enum,枚举;Pathlib,不需要通过os模块使用path,而是直接使用pathlib模块导入path,语法更精简

    考虑,新的特性和语法有没有对现有开发模式产生足够积极作用。 性能有没有提高的足够多。迁移成本是不是可以接受。

  • 相关阅读:
    列表与数组 Perl入门第三章
    北京地区-医类汇总
    via/route blockage/size blockage/wire/pin guide/pin blockage/partition
    dbGet(三)
    dbGet(二.一)hinst
    微服务是什么?
    Docker入门 四 Swarms集群
    Docker入门 三 用服务来扩展和负载均衡你的应用
    Linux2.2路径、删除目录及文件
    Linux2.1系统目录结构、ls、文件类型、alias
  • 原文地址:https://www.cnblogs.com/wang-kai-1994/p/10374976.html
Copyright © 2011-2022 走看看