我知道AND运算符的优先级高于OR运算符。我还相信,就像在C / CPP中一样,这些运算符的关联性是从左到右(尽管这对我的问题似乎并不重要)。
我在Python 2.7.1中运行以下代码:
情况1:
我有三个功能:
def f(): print 3; return True
def g(): print 4; return False
def h(): print 5; return False
当我运行以下命令时
f() and g() or h()
我懂了
3
4
5
False
很好(我所期望的)。
情况2:
如果我将功能更改为:
def f(): print 3
def g(): print 4
def h(): print 5
我得到相同的命令:
3
5
情况3:
如果我将命令更改为
f() and (g() or h())
我只有:
3
我知道在最后两个示例中,这些函数实际上并未返回布尔值,但是-我不了解这种行为。似乎不一致:
我们是否将函数f(),h(),g()称为True或False或其他(什么?)?
为什么在第二种情况下,h()运行而不是g()?
为什么在最后一种情况下它们(g和h)都不运行?
在Python中,没有显式返回任何内容的函数将返回None
。None
在布尔上下文中被认为是错误的。
在第二个示例中,g
由于and
操作员短路,它没有运行。f
的结果为假,因此g()
不需要评估,因为其结果不会更改整个and
表达式的结果。
同样,在第三个例子,既然f()
是假的,的右侧and
不需要评估,所以g
并h
不会运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句