列表上的布尔运算是什么意思?

2024-09-20 06:38:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在浏览pyftpdlib的来源,我发现了这个:

if self.rejected_users and self.allowed_users: raise AuthorizerError("rejected_users and allowed_users options are mutually exclusive")

rejected_users和{}是列表。 让我困惑的是and运算符是如何对两个列表进行操作的。如果有人帮我,我会很感激的。在


Tags: andself列表if来源exclusiveusersare
3条回答

Python中的所有对象都有一个布尔“值”;它们在布尔上下文中要么为真,要么为假。在

空列表是假的。这适用于所有序列和容器,包括元组、集合、字典和字符串。在

数字0也是假的,所以0、0.0、0j也都是假的,None和{}本身也是假的:

>>> bool([])
False
>>> bool([1, 2])
True
>>> bool(0)
False
>>> bool('')
False

在布尔上下文中,其他所有内容都被视为true;因此not为空的列表为true,两个非空列表以及and也被视为true。在

您可以通过实现^{}并返回0使自定义类型看起来像空容器,或者通过实现^{}*并返回False来使自定义类型看起来像一个空容器,当实例是数值0的布尔等价物时。在

只需记住andor的短路;如果第一个表达式锁定结果,则返回该值,第二个表达式将被完全忽略。对于and,这意味着在表达式x and y中,如果x是一个假值(如空列表),则忽略{},因为在这种情况下,整个表达式永远不可能是真的。对于x or y,如果x为真值,则忽略y。在

这些规则都包含在Boolean operations reference documentation中。在

在python3中,使用^{}代替。在

如果list_a为空,则list_a and list_b将计算为list_a,否则将计算为list_b。例如:

>>> [1] and [2]
[2]
>>> [] and [2]
[]

空列表的计算结果为False,非空列表的计算结果为True。在

if list1 and list2:

相当于:

if list1 is not empty and list2 is not empty


List of falsy values in python

  • 错误

  • 任何数字类型的零,例如,00L0.00j

  • 任何空序列,例如,''()[]

  • 任何空映射,例如{}

  • 如果类定义了 __nonzero__()__len__()方法,当该方法返回整数0或bool值False时。

所有其他值都被认为是真的,所以许多类型的对象都是真的。在

相关问题 更多 >