Python 如果是a或b解释
此版本显然有效,但:Python 如果是a或b解释,python,syntax,Python,Syntax,此版本显然有效,但: a = None b = 'Test' if a is None or b is None: print('Test') 预期结果相同,但计算结果为False,为什么?布尔表达式的运算符优先级和计算规则在Python中的工作方式略有不同。这不是你想象的那样: if (a or b) is None: print('Test') 上述条件是询问评估a或b的结果是否为无,并且对于a和b的当前值,它永远不会为无;a或b将返回b的“Test”值,因为a是Non
a = None
b = 'Test'
if a is None or b is None:
print('Test')
预期结果相同,但计算结果为False,为什么?布尔表达式的运算符优先级和计算规则在Python中的工作方式略有不同。这不是你想象的那样:
if (a or b) is None:
print('Test')
上述条件是询问评估a或b的结果是否为无,并且对于a和b的当前值,它永远不会为无;a或b将返回b的“Test”值,因为a是None。如果要测试两个值中是否有一个为无,则只有第一个语法有效:
(a or b) is None
需要明确的是,在Python中,x或y将返回第一个非false表达式的值,而None、[]、{}、0和false都被认为是false。如果希望将表达式缩短一点,则这相当于代码的第一个版本:
a is None or b is None
在Python中,or语句不仅返回True或False,还返回它的第一个参数,即
在代码中,当计算a或b为无时,会发生以下情况:
None是falsy,a是None,所以a或b返回b。
b不是零。
a或b为“无”,解析为“假”。
如果您希望非常简短,可以使用以下结构:
if not a or not b:
请注意,虽然这在大多数情况下都有效,但表达式并不完全等同于a is None或b is None,而是a==None或b==None。看看为什么这不是同一件事。因为a或b是b。a和b都不是。不清楚为什么你认为这两个不同的东西会有相同的结果。为什么是b,这里的完整语法是什么?我只是想缩短a是X或b是X或…@Sentinan,这就是重点!你不能这样缩短它,你在第二个版本中写的是完全不同的东西。一个较短但真正等效的表达式是:如果不是A或不是b,则为:的可能副本
if None in (a, b):
print('Test')