`and`运算符链在python中是如何工作的?

`and`运算符链在python中是如何工作的?,python,python-3.x,Python,Python 3.x,在我的程序中,遇到以下问题: >>> True and True and (3 or True) 3 >>> True and True and ('asd' or True) 'asd' 而我希望根据括号中的结果得到一些布尔值。因此,如果我尝试这样的比较(0或True)或(''或True)python将返回True,这很明显,因为0和'在比较中相当于False 为什么python不通过将3和'asd'转换为True来返回布尔值?来自: 重要异常:布尔运算

在我的程序中,遇到以下问题:

>>> True and True and (3 or True)
3

>>> True and True and ('asd' or True)
'asd'
而我希望根据括号中的结果得到一些布尔值。因此,如果我尝试这样的比较
(0或True)
(''或True)
python将返回
True
,这很明显,因为
0
'
在比较中相当于
False

为什么python不通过将
3
'asd'
转换为
True
来返回布尔值?

来自:

重要异常:布尔运算或and始终返回 它们的一个操作数

这种行为最容易通过以下方式看到:

>>> 3 and True
True

>>> True and 3
3
如果需要消除此行为,请将其包装在bool中:

正如Reut Sharabani所回答的,这种行为允许以下有用的事情:

>>> my_list = []
>>> print (my_list or "no values")
发件人:

重要异常:布尔运算或and始终返回 它们的一个操作数

这种行为最容易通过以下方式看到:

>>> 3 and True
True

>>> True and 3
3
如果需要消除此行为,请将其包装在bool中:

正如Reut Sharabani所回答的,这种行为允许以下有用的事情:

>>> my_list = []
>>> print (my_list or "no values")

您是否在询问
的作用,或者为什么它不会自动将其结果转换为布尔值?此外,输入
(0或True)
(''或True)
也不会给出
False
。你会得到
True
@user2357112是的,我愚蠢的错误。更新。关于这个问题,我有点困惑如何纠正它。但是下面的答案澄清了这一点,你是在问
做什么,还是为什么它不自动将结果转换为布尔值?另外,输入
(0或True)
(''或True)
不会给你
。你会得到
True
@user2357112是的,我愚蠢的错误。更新。关于这个问题,我有点困惑如何纠正它。但下面的答案澄清了这一点——其他令人惊讶和愚蠢的事情:与基于语法的操作相比,内置名称查找和函数调用效率低下,
not x
bool(x)
更快地从truthy/falsy转换为
True
False
。我并不建议这样做,除非你真的很忙,而且这是你代码中最热门的部分。最快的解决方案是直接使用truty和falsy值,而不进行转换。其他令人惊讶和愚蠢的事情:与基于语法的操作相比,内置名称查找和函数调用效率低下,
not x
是一种比
bool(x)
更快地将truthy/falsy转换为
True
False
的方法。我并不建议这样做,除非你真的很忙,而且这是你代码中最热门的部分。最快的解决方案是直接使用truthy和falsy值,而不进行转换。