类似于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。
好问题!它正在检查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特殊方法名称。
循环和条件在其所有条件上隐式使用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这样的一些非常博学的人更喜欢,因
问题内容: 中的运算符似乎在列表上运行异常。谁能告诉我这是怎么回事? 输出值 似乎影响类的每个实例,而似乎以我希望事情表现的方式表现。 该+=运算符称为“化合物赋值运算符”。 问题答案: 一般的答案是+=尝试调用特殊方法,如果该方法不可用,它将尝试使用替代方法。因此,问题在于这些特殊方法之间的差异。 的特殊方法是就地此外,这是它发生变异,它作用于对象。该特殊方法返回一个新的对象,也可用于标准+操作