`if x:`完全等同于`如果bool(x)为True:`?

Red*_*edX 5 python

对于我们正在编写的小型测试框架,我正在尝试提供一些实用程序功能.

其中之一应该是等同于if x:但如果这是完全 equivallent到if bool(x) is True:那么我可以只提供一个函数来检查if x is True:if x:.

这种否定也是等同的吗?if bool(x) is False:等于if not x:

Mar*_*ers 6

if x:完全等效于测试的布尔真值,是的.

if声明文件:

它通过逐个评估表达式来选择其中一个套件,直到发现一个为真(参见布尔运算中的true和false定义)

其中布尔运算部分详述了如何定义真值.该bool()函数遵循完全相同的规则:

返回一个布尔值,即True或False之一.使用标准真值测试程序转换x.

标准类型文档有一个真值测试部分:

任何对象都可以用于真值进行测试,用于在使用ifwhile病症或如下面的布尔运算的操作数.

not简单地反转相同的真值; 所以如果x上述规则被认为是真实的,则not x返回False,True否则.

请注意:在Python 2,内置的名称FalseTrue屏蔽通过设置一个全球性的:

>>> True = False
>>> True
False
Run Code Online (Sandbox Code Playgroud)

因此,is身份测试也可能被重新分配所欺骗.Python 3制作FalseTrue关键字.

您的效用函数不需要使用bool(x) is Truebool(x) is False.您所需要的只是bool(x)not bool(x),因为这些已经生产TrueFalse对象.bool()并且not不能返回任何其他东西,使用is True或者is False使用这些是非常多余的.

最后但同样重要的是,尽量不要重新发明测试轮.Python标准库附带一个unittest库; 它既有assertTrueassertFalse功能,以及这些功能的实现只需使用ifif not.