这个Python表达式有意义吗?

时间:2012-11-29 15:06:06

标签: python logic expression

我在python程序中多次发现这种表达式:

if variable is not None:
    dothings(variable)

这对我来说似乎很奇怪,而且我认为它没有任何意义:

if variable:
    dothings(variable)

也许我对Python不够了解,并且表达式已在某处解释过了?

4 个答案:

答案 0 :(得分:14)

variable可以是0False[]();换句话说是“虚假”,然后会跳过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之外的任何内容。与我上面所说的类似,所有“登录功能”都在确定用户是否传递了任何内容,而不是该值是否有效,是否等等。