对于我们正在编写的小型测试框架,我正在尝试提供一些实用程序功能。
其中一个应该等同于if x:
但如果完全等同于if bool(x) is True:
那么我只能提供一个函数来检查if x is True:
和if x:
。
这种否定也是等同的吗? if bool(x) is False:
等于if not x:
?
答案 0 :(得分:6)
if x:
完全等同于测试布尔值真值,是的。
它通过逐个评估表达式来选择其中一个套件,直到找到一个为真(请参阅Boolean operations部分了解true和false的定义)
Boolean operations section详细说明了如何定义真相。 bool()
function遵循完全相同的规则:
返回一个布尔值,即True或False之一。 x使用标准真值测试程序进行转换。
标准类型文档有Truth Value Testing section:
可以测试任何对象的真值,以便在
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
或unittest
非常多余。
最后但同样重要的是,尽量不要重新发明测试轮。 Python标准库附带一个assertTrue
库;它有assertFalse
和if
个函数,implementation of these functions只使用if not
和sc.getPersistentRDDs
。
答案 1 :(得分:2)
是。这些是等价的。 bool
使用的规则与not
使用的规则相同。 category = c(rep(c("a","b","c"),100))
x = (rep(1:5,60))
y = rnorm(300,10,3) # I made these positive values
df = data.frame(category,x,y)
只是在不改变确定真实性或虚假性的逻辑的情况下反转这些值。
答案 2 :(得分:1)
除了@Martijn的答案之外,如果您正在构建的是某个类,您可以通过定义ìf x
函数来定义您希望它在__bool__
这样的真值测试用例中具有的行为。
>>> class A:
pass
>>> a=A()
>>> if a:
print("this instance class is truthish")
this instance class is truthish
>>> a is True
False
>>> bool(a) is True
True
>>>
用户定义类的默认行为在真值测试中始终为true,要更改它只是在python 2中定义__bool__
(__nonzero__
),因此它会根据语义调整类,例如:
>>> class Switch:
def __init__(self, state="off"):
self.state = state
def __bool__(self):
if self.state == "on":
return True
return False
>>> x=Switch()
>>> if x:
print("this instance class is truthish")
>>> x is True
False
>>> bool(x) is True
False
>>> x.state="on"
>>> if x:
print("this instance class is truthish")
this instance class is truthish
>>> x is True
False
>>> bool(x) is True
True
>>>