对于我们正在编写的小型测试框架,我正在尝试提供一些实用程序功能.
其中之一应该是等同于if x:但如果这是完全 equivallent到if bool(x) is True:那么我可以只提供一个函数来检查if x is True:和if x:.
这种否定也是等同的吗?if bool(x) is False:等于if not x:?
if x:是完全等效于测试的布尔真值,是的.
从if声明文件:
它通过逐个评估表达式来选择其中一个套件,直到发现一个为真(参见布尔运算中的true和false定义)
其中布尔运算部分详述了如何定义真值.该bool()函数遵循完全相同的规则:
返回一个布尔值,即True或False之一.使用标准真值测试程序转换x.
标准类型文档有一个真值测试部分:
任何对象都可以用于真值进行测试,用于在使用
if或while病症或如下面的布尔运算的操作数.
not简单地反转相同的真值; 所以如果x上述规则被认为是真实的,则not x返回False,True否则.
请注意:在Python 2,内置的名称False和True可屏蔽通过设置一个全球性的:
>>> True = False
>>> True
False
因此,is身份测试也可能被重新分配所欺骗.Python 3制作False和True关键字.
您的效用函数不需要使用bool(x) is True或bool(x) is False.您所需要的只是bool(x)和not bool(x),因为这些已经生产True和False对象.bool()并且not不能返回任何其他东西,使用is True或者is False使用这些是非常多余的.
最后但同样重要的是,尽量不要重新发明测试轮.Python标准库附带一个unittest库; 它既有assertTrue和assertFalse功能,以及这些功能的实现只需使用if和if not.