python 中的坑

吐槽 & 备忘专用帖。

  1. Python 3 整数除法用 /// 是精确除法,Python 2 整数除法用 /

    1
    2
    3
    4
    7 / 3
    2.3333333333333335
    7 // 3
    2
  2. Python 整数除法向下取整,而 C、C++、Java 中均向 0 取整(直接截断小数)

    1
    2
    3
    4
    7 // -3
    -3
    -7 // 3
    -3

    取模运算结果与除法一致:

    1
    2
    3
    4
    7 % -3
    -2
    -7 % 3
    2

    总是满足 除数 * 商 + 取模 = 被除数

    要截断取整,可以:

    1
    2
    int(7 / 3)
    2
  3. Python 不支持方法重载,可以用默认参数和可变参数实现类似功能

  4. Python int 整数类型不存在溢出概念,溢出时自动扩充,因此也不存在最大最小整数的概念,如果要使用最大最小值可以用浮点定义:

    1
    2
    3
    4
    float('inf') 
    inf
    float('-inf') # 负无穷
    -inf
  5. Python 是动态语言,自定义类中不能使用自己,因为自己还没被定义

  6. Python 不支持常量(C/C++ 中的 const,Java 中的 final

  7. Python 类成员不支持 privatepublic 之类的修饰,所有都默认是 public

    • 以单下划线 _ 开头的,外部类仍可以直接使用,但用 import * 不会默认导入

    • 以双下划线 __ 开头的,外部类可以间接使用

  8. Python 类成员是类的成员,与实例无关,但可以被同名实例成员覆盖,即用实例无法访问该类成员,除非删除实例成员

  9. Python 比较操作符 == 调用 __eq__ 方法,与 Java 中的 equals 方法类似;is 与 Java 中的 == 类似,用于判断同一性

  10. Python 3 逻辑非 not 调用 __bool__ 方法,返回值与实现有关,有些容器为空则返回 False 而有些容器返回 True

  11. Python 不支持数组,数组可初始化指定长度 list 实现

  12. Python 不支持 do ... while ... 语法