Python:和/或运算符奇怪的行为

加里·本

我知道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)都不运行?

user2357112支持Monica

在Python中,没有显式返回任何内容的函数将返回NoneNone在布尔上下文中被认为是错误的。

在第二个示例中,g由于and操作员短路它没有运行f的结果为假,因此g()不需要评估,因为其结果不会更改整个and表达式的结果

同样,在第三个例子,既然f()是假的,的右侧and不需要评估,所以gh不会运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#+运算符的奇怪行为

来自分类Dev

PHP'and'运算符的奇怪行为

来自分类Dev

模板运算符的奇怪行为<<

来自分类Dev

递减运算符的奇怪行为

来自分类Dev

borland turboC++ 中奇怪的运算符优先级和赋值行为

来自分类Dev

算术中奇怪的python'is'运算符

来自分类Dev

算术中奇怪的python'is'运算符

来自分类Dev

奇怪的行为Python 3.8 Walrus运算符:链式不等式

来自分类Dev

奇怪的行为:函数的三元运算符

来自分类Dev

使用条件运算符的奇怪Java行为。是虫子吗?

来自分类Dev

Ternery运算符在C ++中的奇怪行为

来自分类Dev

node.js中的奇怪&&运算符行为

来自分类Dev

F#运算符重载奇怪的行为

来自分类Dev

三元运算符在递归中的奇怪行为

来自分类Dev

Date(),Date.UTC()与范围运算符的奇怪行为

来自分类Dev

使用条件运算符的奇怪Java行为。是虫子吗?

来自分类Dev

node.js中的奇怪&&运算符行为

来自分类Dev

Ternery运算符在C ++中的奇怪行为

来自分类Dev

stl::map 中运算符 [] 的奇怪行为

来自分类Dev

三元运算符的奇怪行为

来自分类Dev

运算符>> =和>>的奇怪优先级

来自分类Dev

了解'| '和'&'运算符行为(R的逻辑运算符)

来自分类常见问题

接口和类的'instanceof'运算符的行为不同

来自分类Dev

后缀和前缀运算符的行为(Java)

来自分类Dev

YAML :: Node运算符=和引用行为

来自分类Dev

增量运算符和“不确定行为”

来自分类Dev

CString运算符“ + =”和“ +”之间的不同行为

来自分类Dev

后缀和前缀运算符的行为(Java)

来自分类Dev

Python OR运算符和括号