为什么在Python中的while循环中空列表的计算结果为False

Van*_*Ice 3 python loops list while-loop

对于False在空列表中评估的while循环,会发生什么过程?

例如:

a=[1, 2, 3]
while a:
    a.pop()
Run Code Online (Sandbox Code Playgroud)

本质上,我想知道while-loop正在检查列表对象的哪个方法或属性,以便决定是否终止.

Mad*_*ist 6

循环和条件隐含地用于bool所有条件.该过程在文档的"真值测试"部分中明确记录.对于像列表这样的序列,这通常最终是对__len__方法的检查.

bool这样工作:首先它尝试__bool__方法.如果__bool__未实现,则检查是否__len__为非零,如果不可能,则返回True.

与所有魔术方法查找一样,Python只会查看类,而不是实例(请参阅特殊方法查找).如果您的问题是关于如何更改行为,则需要子类化.将单个替换方法分配给实例字典根本不起作用.