或者在python3赋值中

时间:2017-05-02 11:26:08

标签: python python-3.x

我是python的新手,这次我在包含图形的游戏编程中将它用于AI。

我在书中看到了一个代码示例

def __init__(self, m=None):
    if isinstance(m, Matrix33):
        m = list(m._m)
    self._m = m or [1., 0., 0., 0., 1., 0., 0., 0., 1.]

python如何在没有任何条件的情况下对变量赋值进行OR?

1 个答案:

答案 0 :(得分:0)

我认为您的期望是布尔运算符or返回TrueFalse。但它并没有。 or返回其第一个要评估为True的操作数。

所以:

1 or 0 - > 1(如果您在需要布尔值的情况下使用它,则视为True

0 or 'B' - > 'B'(如果您在需要布尔值的情况下使用它,则视为True

您引用的示例是一种习惯用语,您会在大多数语言中找到自动将非布尔数据类型转换为布尔值的习惯用法,这是一个可以追溯到PL / 1的悠久传统。如果您希望第一个操作数包含None或有效值,并且您获得的有效值实际为零,那么这个成语可能会让您误入歧途。

你也可以更明确地表达为

self._m = m if m else [1., 0., 0., 0., 1., 0., 0., 0., 1.]