抱歉,是否曾经有人问过这个问题,但是我徒劳地寻找我 确切 问题的答案。基本上,对于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 :
if
False
None
0
0.0
-0.0
''
u''
__bool__
__nonzero__
__len__
如果任何一个对象适用,则该对象被视为“ false”,否则为“ true”,无论该对象实际上与False或等于还是相同。True
True
现在,如果已经安排了x必须是对象True或对象之一False,则可以放心地编写if x。如果您安排了“真实性”x指示是否要执行该操作(无论类型如何),那么可以放心地编写if x。您可以在哪里写,应该更喜欢这样做,因为它更容易阅读。
x
if x
通常,如果允许x使用该值,True那么您将处于两种情况之一,因此您将不会编写if x is True。重要的是正确记录的含义x,以使其反映代码中使用的测试。
if x is True
希望Python程序员知道什么被认为是正确的,因此,如果您仅编写文档,“如果该函数x为true,则运行该函数”,那么这表示原始代码的作用。对其进行记录,“如果…x is True将运行功能”将具有不同的含义,并且由于PEP8中的样式规则要求测试真实性而不是特定值,因此不太常用True。
x is True
但是,如果您希望代码在x为空容器的情况下与在不同情况下的行为有所不同None,则可以编写类似的代码if x is not None。
if x is not None