Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果是a或b解释_Python_Syntax - Fatal编程技术网

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')