表达式“级联”比较
python的表达式比较与c不完全相同
据个例子:
-1 > -2 > 0
python 答案为 False, c 答案为 1(True)
经过测试,形如 a ? b ? c ? d ? … z 的表达式,(?为 比较符号 如 ==, <=, >= 等)
python 比较的逻辑:
- 判断 a ? b
- 如果是False 那此表达式的值为False,运算结束。
- 如果是True, 那么顺次判断下两个值( 也就是 b ? c) ,跳转到2
- 以此类推, a ? b,b ? c,c ? d … 直到最后一个 如果此时还为True,那么这个表达式的值为True
c/c++ 比较的逻辑
- 判断 a ? b
- 如果是False 那么 判断 0 ? c ,如果是 True 那末判断 1 ? c
- 以此类推 不断将刚刚比较的值还为 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)