ssa*_*ast 24 python if-statement boolean
如果以前曾经问过这个问题,我会道歉,但是我徒劳地搜索了我的确切问题的答案.基本上,使用Python 2.7,我有一个运行一系列地理处理工具的程序,取决于用户在脚本中调整的一系列True/False变量所需的内容,例如
x = True
if x:
run function
Run Code Online (Sandbox Code Playgroud)
但是,我现在发现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:
Run Code Online (Sandbox Code Playgroud)
因此,除False之外的任何值似乎都会计算为True,如果x == True或x为True,则不会出现这种情况.看作PEP 8强烈建议仅使用if x: variant,有人可以解释为什么会出现这种情况吗?似乎如果x:更像是"如果x不是假"或"如果x存在"的测试.考虑到这一点,我相信如果x是真的我应该使用:在这种情况下,尽管PEP 8必须说.
亲切的问候
Ste*_*sop 30
Python中的以下值在if
其他逻辑上下文中是错误的:
False
None
0
,0.0
,-0.0
''
和u''
__bool__
(在Python3中)返回False
,或__nonzero__
(在Python2中)返回False
或0
.__bool__
(在Python3中)或__nonzero__
(在Python2中),但实现__len__
返回等于0的值如果任何一个对象适用,则该对象被视为"假",否则被视为"真",无论它是否实际等于或等于False
或True
现在,如果你已经安排那x
是必然的对象之一True
或False
,那么你就可以放心地写if x
.如果您已经安排"真实性" x
表示是否执行操作,无论类型如何,那么您可以安全地编写if x
.您可以写下您应该这样做的地方,因为阅读更清晰.
通常情况下,如果允许x
取值,True
那么你就属于这两种情况之一,所以你不会写if x is True
.重要的是要正确记录其含义x
,以便它反映代码中使用的测试.
Python程序员应该知道什么被认为是真的,所以如果你只是记录,"运行函数如果x
是真的",那么表示原始代码的作用.记录它,"运行函数if x is True
"将具有不同的含义,并且由于PEP8中的样式规则要求测试真实性而不是特定值,因此不太常用True
.
但是,如果您希望代码在x
空容器的情况下表现不同None
,那么您可以编写类似的东西if x is not None
.
我想添加一个简短的示例,其中这 3 个测试有所不同:
def test(x):
print(x, ":", bool(x), x == True, x is True)
test("something")
test(1)
test(True)
Run Code Online (Sandbox Code Playgroud)
输出(格式很好):
# "something" : True False False
# 1 : True True False
# True : True True True
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28301 次 |
最近记录: |