`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值,而不进行转换。