如果之前有人问过这个问题,我深表歉意,但我一直在徒劳地寻找我的问题的答案。基本上,在Python2.7中,我有一个运行一系列地理处理工具的程序,这取决于用户在脚本中调整的一系列真/假变量(例如
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则不是这种情况。鉴于PEP8强烈建议仅使用if x:变量,有人能解释为什么会发生这种行为吗?似乎if x:更像是对“if x is not False”或“if x exists”的测试。考虑到这一点,我认为如果x是真的,我应该使用它:在这种情况下,不管PEP 8怎么说。
亲切的问候
其他错误值包括
0
、''
、[]
。你应该使用if x:
版本。在
if
上下文和其他逻辑上下文中,Python中的以下值为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
。如果您已经安排了x
的“真实性”指示是否执行操作,而不考虑类型,那么您可以安全地编写if x
。你可以写的地方,你应该这样做,因为它更干净的阅读。通常,如果允许
x
获取值True
,那么您处于这两种情况之一,因此您不会编写if x is True
。重要的是正确地记录x
的含义,以便它反映代码中使用的测试。Python程序员应该知道什么是真的,所以如果您只是编写文档,“如果
x
是真的,则运行函数”,那么这就表示了原始代码的作用。记录它,“如果x is True
将有不同的含义,则运行函数,并且由于PEP8中的样式规则(该规则表示要测试真实性,而不是特定值True
)而不太常用。但是,如果您希望代码在
x
是空容器而不是None
的情况下有不同的行为,那么您应该编写类似if x is not None
的代码。都是
True
Other truth values.
文档解释了其他值。
就PEP8的原因而言,它的语义要多得多
相关问题 更多 >
编程相关推荐