我正在pyftpdlib寻找源头,我发现了这个:
if self.rejected_users and self.allowed_users:
raise AuthorizerError("rejected_users and allowed_users options are mutually exclusive")
rejected_users并且allowed_users是列表.令我困惑的是and操作员如何操作两个列表.如果有人帮助我,我会很感激的.
Python中的所有对象都有一个布尔值'value'; 它们在布尔上下文中为true或false.
空列表是错误的.这适用于所有序列和容器,包括元组,集合,字典和字符串.
数字0也是假的,所以0,0.0,0j也都是假的None,当然也是如此False:
>>> bool([])
False
>>> bool([1, 2])
True
>>> bool(0)
False
>>> bool('')
False
Run Code Online (Sandbox Code Playgroud)
在布尔上下文中,其他所有内容都被认为是真的; 所以这是一个列表不是空的是真的,两个非空列表一起and被认为也是如此.
您可以通过实现__len__()和返回使自定义类型看起来像空容器0,或者通过实现*看起来像一个数字,并在实例是数字零的布尔等价物时返回.__nonzero__()False
记住那个and和or短路; 如果第一个表达式锁定结果,则返回该值,并且完全忽略第二个表达式.因为and,这意味着在表达式中x and y,y如果x是假值(如空列表),则会被忽略,因为在这种情况下整个表达式永远不会为真.因为x or y,y如果x是真值,则被忽略.
这些规则都包含在布尔运算参考文档中.
*在Python 3中,请__bool__改用.