Python对象的真假标准是什么?

8

我见过以下几种情况:

>>> def func(a):
...     if a:
...         print("True")
...
>>> a = [1, 2, 3]
>>> func(a)
True
>>> a == True
False

为什么会出现这种差异?

2个回答

11

Python中的所有对象1都有一个真值

任何对象都可以用于真值测试,在ifwhile条件中使用,或作为下面布尔操作符的运算数。以下值被认为是假的:

  • None

  • False

  • 任何数字类型的零,例如:00.00j

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

  • 任何空映射,例如:{}

  • 如果类定义了__bool__()__len__() 方法,并且该方法返回整数零或布尔值False,则用户自定义类的实例也被视为假。

所有其他值都被认为是真的——因此许多类型的对象始终是真的。


1 … 除非它们具有引发异常或返回TrueFalse以外的值的__bool__()方法。前者不寻常,但有时是合理的行为(例如,请参阅下面的user2357112的评论);后者则不是。


2
通常情况下,文档会忽略运算符重载的更微妙的方面之一。您可以创建一个类,在尝试获取其真值时引发TypeError异常,这在NumPy数组等情况下有时是合理的。 - user2357112

2
当你输入if a:时,等同于if bool(a):。所以这并不意味着a is True,只是a作为布尔值的表示是True
一般来说,boolint的子类,其中True == 1False == 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接