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,语法更精简

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

  • 相关阅读:
    Leetcode 15 3Sum
    Leetcode 383 Ransom Note
    用i个点组成高度为不超过j的二叉树的数量。
    配对问题 小于10 1.3.5
    字符矩阵的旋转 镜面对称 1.2.2
    字符串统计 连续的某个字符的数量 1.1.4
    USACO twofive 没理解
    1002 All Roads Lead to Rome
    USACO 5.5.1 求矩形并的周长
    USACO 5.5.2 字符串的最小表示法
  • 原文地址:https://www.cnblogs.com/wang-kai-1994/p/10374976.html
Copyright © 2011-2022 走看看