pep8轻微的烦恼

wim*_*wim 5 python boolean pep8

/tmp/spam.py:

n = 69

if n == True:
    print 'potato'
Run Code Online (Sandbox Code Playgroud)

pep8实用程序抱怨这个条件:

wim@SDFA100461C:/tmp$ pep8 spam.py 
spam.py:3:6: E712 comparison to True should be 'if cond is True:' or 'if cond:'
Run Code Online (Sandbox Code Playgroud)
  • 根据pep8本身,第一个建议是错误/"更糟"
  • 第二个建议改变了代码的行为

对于您确实想要检查相等性的情况,最佳做法是什么TrueTrue使用isOK进行身份检查吗?为什么pep8实用程序提供了一种在pep8本身明确不鼓励的替代方案?

Dun*_*can 6

如果你确实需要检查的平等True再利用==,而忽略PEP8,但几乎是不是你想要的任何可能的情况下.

如果你想知道你的值是否是Python认为是真的值之一,请使用if cond:.如果你想知道你拥有的值是否是单例值,True那么使用is True布尔值True并且False是单例,因此is在这种情况下使用它是正确的.

如果你需要测试你的对象是单身True,还是linter或者代码审查者抱怨is True,那么isinstance(x, bool) and x就是行为等同(但速度较慢)的替代品.

检查x == True是一个中途的房子.这是真的x is True,对于你的情况是假的x=69,但是还有其他对象本身不是,True但是x==True给出了一个意想不到的真实结果,如1 == True真实.(感谢@Ant).

所以把它放在一起:

value of n:    True  1     69     False   0
-----------------------------------------------
expression     result
-----------------------------------------------
if n:          True  True  True   False   False
if n is True:  True  False False  False   False
if n==True:    True  True  False  False   False
Run Code Online (Sandbox Code Playgroud)

从该表中选择一行,给出您真正想要的结果(最后一行不是它).