我在python程序中多次发现这种表达式:
if variable is not None:
dothings(variable)
这对我来说似乎很奇怪,而且我认为它没有任何意义:
if variable:
dothings(variable)
也许我对Python不够了解,并且表达式已在某处解释过了?
答案 0 :(得分:14)
variable
可以是0
,False
,[]
或()
;换句话说是“虚假”,然后会跳过if
语句。
有关布尔上下文中被视为false的更多详细信息,请参阅Truth testing。
简而言之,测试variable is not None
是否允许variable
其他,包括在布尔上下文中被视为False的值。
答案 1 :(得分:5)
有些值 falsy ,但不是None
。您可能仍希望dothings()
获得这些值。
Here are the things that are falsy in Python 2.(您可能希望将URL中的“2”更改为“3”以获取Python 3的值,但它没有太大变化。)
答案 2 :(得分:1)
E.g。
i = 0
if i is not None:
print i # prints i
if i:
print i # prints nothing
答案 3 :(得分:0)
在谷歌语音python实现中,我也遇到过这种情况,他们的使用是在函数调用期间。参数默认为“None”,然后在调用函数时,它们可以检查值是否更改或默认值。 即。
def login (user=None, password=None)
if user is None:
user = input('Please enter your username');
...
return <something>;
通过
调用login()
OR
login(user='cool_dude')
OR
您希望的任何用户/密码组合。
此外,您对逻辑的“更新”意味着变量== true或false。这对于所有情况都不正确(它可能在某些情况下有效,但我把它们扔掉了,因为它不是一般情况)。您使用“NONE”逻辑测试的是变量是否包含除NONE之外的任何内容。与我上面所说的类似,所有“登录功能”都在确定用户是否传递了任何内容,而不是该值是否有效,是否等等。