表达式“级联”比较

python的表达式比较与c不完全相同

据个例子:

-1 > -2 > 0

python 答案为 False, c 答案为 1(True)

经过测试,形如 a ? b ? c ? d ? … z 的表达式,(?为 比较符号 如 ==, <=, >= 等)

python 比较的逻辑:
  1. 判断 a ? b
  2. 如果是False 那此表达式的值为False,运算结束。
  3. 如果是True, 那么顺次判断下两个值( 也就是 b ? c) ,跳转到2
  4. 以此类推, a ? b,b ? c,c ? d … 直到最后一个 如果此时还为True,那么这个表达式的值为True
c/c++ 比较的逻辑
  1. 判断 a ? b
  2. 如果是False 那么 判断 0 ? c ,如果是 True 那末判断 1 ? c
  3. 以此类推 不断将刚刚比较的值还为 1 或 0 ,然后与余下的表达式比较直到结束

函数的默认参数

小心默认参数并不是深拷贝的问题。

如:

1
2
3
class Board:
    def __init__(self, board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]):
        self._board = board

这里所有的Board实例都共享了同一个_board值,因为在默认参数中的赋值同样是引用赋值。

如果想正常使用需要改为深拷贝:

1
2
3
4
import copy
class Board:
    def __init__(self, board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]):
        self._board = copy.deepcopy(board)