为什么要给我结果?我听不懂

问题描述 投票:0回答:2

运行下面的代码

print(print('1') or print('2') and print('3') or print('4'))

将导致:

1
2
4
None

我知道优先级是

not
>
and
>
or
,所以我预料到了

2
1
4
None

我不明白这个结果。请解释一下。

python short-circuiting
2个回答
0
投票

我们必须理解多个概念。

打印

在Python中

print
是一个函数,作为所有函数它都必须返回一些东西,它是
None

假/真

Python 中的任何值都可以解释为布尔值。如:

字符串

空字符串是

Falsy
,所以会被认为是
False
。任何其他字符串(无空)都是
Truthy
并被视为
True

None
Falsy
所以它被认为是
False

整数

0
Falsy
,任何其他(负面事件)都是
Truthy

等等...

逻辑比较

Python 试图通过逻辑比较变得聪明。

如果 or 的第一个组件是

Truthy
,Python 将停止寻找比较的其他组件。

例如,Python 不会检查下一个示例中的

value2
,因为
value1
True

value1 = True
value2 = False

if value1 or value2:
    pass

如果 or 的第一个组件是

Falsy
,Python 将停止寻找比较的其他组件。

例如,Python 不会检查下一个示例中的

value2
,因为
value1
False

value1 = False
value2 = True

if value1 or value2:
    pass

有了所有这些知识:

print(print('1') or print('2') and print('3') or print('4'))

将被视为:

comp1 = print('1') or print('2')
comp2 = print('3') or print('4')
comp3 = comp1 and comp2

comp1

因为有一个

or
并且
print
正在返回
None
,即
Falsy
,python将执行两边以查看是否有任何
Truthy
。最后
comp1
将是
Falsy

comp2

comp1
相同。
comp2
将是
Falsy

comp3

最后有一个

and
。第一部分是
Falsy
a,第二部分不会被检查。

最后,第一个打印将是

print
None
,因为值不是
boolean
Falsy
None

检查:

print(1 or 0)

0
投票

考虑到运算符的优先级以及 print() 函数的行为方式,我们已经逐步分解了提供的 Python 代码:

print(print('1') or print('2') and print('3') or print('4'))

结果

打印('1')

为 None,因为 print() 始终返回 None。 表达式如下:

None or **print('2')** and **print('3')** or **print('4')**

表达式变为:

None and print('3')

现在我们有:

None or None or print('4')

最终操作:print('4')

最终输出:

1
2
4
None
© www.soinside.com 2019 - 2024. All rights reserved.