抱歉,是否曾经有人问过这个问题,但是我徒劳地寻找了我确切问题的答案。基本上,对于Python 2.7,我有一个程序运行一系列地理处理工具,具体取决于用户在脚本中调整的一系列True / False变量所要求的内容,例如
x = True
if x:
run function
但是,我现在发现x不必在字面上是“ True”即可运行该函数。例如:
In: x = True
if x:
print True
Out: True
In: x = 123
if x:
print True
Out: True
In: x = 'False'
if x:
print True
Out: True
In: x = False
if x:
print True
Out:
因此,除False以外的任何值似乎都将评估为True,如果x == True或x为True则不是这种情况。看到PEP 8强烈建议仅使用if x:变体,有人可以解释为什么会发生这种现象吗?如果x:似乎更多地是对“如果x不为假”或“如果x存在”的检验。考虑到这一点,我相信如果x为True,我应该使用:在这种情况下,尽管PEP 8不得不说。
亲切的问候
Python中的以下值在if
和其他逻辑上下文中为false :
False
None
0
,0.0
,-0.0
''
和u''
__bool__
(在Python3中)False
或__nonzero__
(在Python2中)返回False
或的任何东西0
。__bool__
(在Python3中)或__nonzero__
(在Python2中)但实现__len__
以返回等于0的值的东西如果有任何一个对象适用,则将其视为“ false”,否则将视为“ true”,无论该对象实际上与False
或等于还是相同。True
现在,如果已安排x
必定是对象True
或对象之一False
,则可以放心地编写if x
。如果您安排了“ true” x
指示是否要执行该操作(无论类型如何),那么可以放心地编写if x
。您可以在哪里写,应该更喜欢这样做,因为它读起来更干净。
通常,如果允许x
使用该值,True
那么您就处于这两种情况之一,因此您不会编写if x is True
。重要的是正确记录的含义x
,以使其反映代码中使用的测试。
希望Python程序员知道什么被认为是正确的,因此,如果您只是编写文档,“如果该函数x
为true,则运行该函数”,那么这表示原始代码的作用。对其进行记录,“如果...运行该功能x is True
”将具有不同的含义,并且由于PEP8中的样式规则要求测试真实性而不是特定值,因此不太常用True
。
但是,如果您希望代码在x
为空容器的情况下与在不同情况下的行为有所不同None
,则可以编写类似的代码if x is not None
。
感谢您详细解释。在我的情况下,虽然我只希望用户使用True或False,而没有其他值,但该文档已被记录为足以遵循PEP 8,并保留了if ::语句。