当前位置: 首页 > 知识库问答 >
问题:

为什么在Python中,一个空列表的值为False

秦跃
2023-03-14

在一个空列表中,当循环计算到False时发生的过程是什么?

例如:

a=[1, 2, 3]
while a:
    a.pop()

本质上,我想知道循环检查列表对象的哪个方法或属性,以决定是否终止。


共有3个答案

彭雨华
2023-03-14

类似于if my\u var的条件相当于if bool(my\u var),本页对此进行了很好的解释:

bool()的返回值

bool()返回:

如果值被忽略,则为False;如果值为True,则为False True

以下值在Python中被认为是false:

没有一个

错误的

任何数字类型的零。例如,0,0.0,0j

空序列。例如,(),[],''。

空映射。例如,{}

类的对象,其中bool()或len()方法返回0或False

除这些值之外的所有其他值都被视为true。

禄俊逸
2023-03-14

好问题!它正在检查bool(a),它(通常)调用type(a).__bool__(a)

Python使用“神奇的方法”实现某些事情。基本上,如果您有这样定义的数据类型:

class MyExampleDataType:
    def __init__(self, val):
        self.val = val

    def __bool__(self):
        return self.val > 20

然后这段代码会做它看起来会做的事情:

a = MyExampleDataType(5)
b = MyExampleDataType(30)

if a:
    print("Won't print; 5 < 20")
if b:
    print("Will print; 30 > 20")

有关详细信息,请参阅Python文档:3.3特殊方法名称。

邢弘业
2023-03-14

循环和条件在其所有条件上隐式使用bool。该程序明确记录在文件的“真值测试”部分。对于列表之类的序列,这通常是对\uuu len\uu方法的检查。

bool的工作原理如下:首先,它尝试方法。如果未实现\uuuu bool\uuuu,它将检查\uuuu len\uuuu是否为非零,如果不可能,则只返回True

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

 类似资料:
  • 我有这个方法,它在Dart 2中编译没有问题。但是,在运行时,我得到以下错误 输入

  • 问题内容: 因此,前几天我在工作中遇到了一些问题,试图计算运行导入后有多少个空值。 所以我做了: 哪个不算空值… 然后我做到了 这给了我计数。 所以,令我感到困扰的是为什么它不计算空值。 我看了这个问题(以及对Google的良好搜索…): 在SQL中,count(column)和count(*)之间有什么区别?,虽然它告诉我不计算空值,但我想确切地知道 为什么 使用这种方法不计算空值? 非常感谢,

  • 问题内容: 在python 3.4中,我输入 并且工作正常,不会引发异常。虽然当然不等于事后。 也可以。 引发异常,但是, 引发异常,但是。发生什么了? 问题答案: 您不是为了平等而比较。您正在 分配 。 Python允许您分配给多个目标: 将两个值分别分配给和。您只需要在右侧有一个 序列 或 可迭代 ,在左侧有一个名称列表或元组。 当您这样做时: 您为 空 名称列表分配了一个 空 序列(空字符串

  • 问题内容: 在Python中创建新的空列表的最佳方法是什么? 要么 我之所以这样问是因为两个原因: 技术原因,关于哪个更快。(创建一个类会导致开销吗?) 代码可读性-这是标准约定。 问题答案: 您可以通过以下方法测试哪段代码更快: 但是,实际上,这种初始化很可能只是程序的一小部分,因此担心此初始化可能会出错。 可读性非常主观。我更喜欢,但是像AlexMartelli这样的一些非常博学的人更喜欢,因

  • 问题内容: 中的运算符似乎在列表上运行异常。谁能告诉我这是怎么回事? 输出值 似乎影响类的每个实例,而似乎以我希望事情表现的方式表现。 该+=运算符称为“化合物赋值运算符”。 问题答案: 一般的答案是+=尝试调用特殊方法,如果该方法不可用,它将尝试使用替代方法。因此,问题在于这些特殊方法之间的差异。 的特殊方法是就地此外,这是它发生变异,它作用于对象。该特殊方法返回一个新的对象,也可用于标准+操作