5

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

if variable is not None:
    dothings(variable)

这对我来说似乎很奇怪,我认为它没有比:

if variable:
    dothings(variable)

可能我对Python不够了解,表达式在某处有解释?

4

4 回答 4

14

variable可以是0, 或False, 或[], 或(); 换句话说,是“虚假的”,然后该if语句将被跳过。

有关在布尔上下文中被认为是错误的更多详细信息,请参阅真值测试。

简而言之,测试 ifvariable is not None允许variable其他任何东西,包括在布尔上下文中否则会被视为 False 的值。

于 2012-11-29T15:07:43.707 回答
5

有些值是虚假的,但不是None。您可能仍然想要dothings()这些值。

以下是 Python 2 中错误的内容您可能希望将 URL 中的“2”更改为“3”以获取 Python 3 的值,但变化不大。)

于 2012-11-29T15:07:36.537 回答
1

例如

i = 0

if i is not None:
    print i    # prints i

if i:
    print i    # prints nothing
于 2012-11-29T15:08:35.407 回答
0

在谷歌语音 python 实现中,我也遇到了这个问题,它们的使用是在函数调用期间。参数默认为“无”,然后在调用函数时,他们可以检查值是否已更改或默认值。IE

def login (user=None, password=None)
  if user is None:
     user = input('Please enter your username');
  ...
  return <something>;

login()

或者

login(user='cool_dude')

或者

您希望的任何用户/密码组合。

此外,您对逻辑的“更新”意味着变量 == true 或 false。这并不适用于所有情况(它可能在某些情况下有效,但我将它们扔掉,因为它不是一般情况)。您使用“NONE”逻辑测试的是变量是否包含除 NONE 之外的任何内容。与我上面所说的类似,所有“登录功能”所做的是确定用户是否传递了任何东西,而不是该值是否有效、真实等。

于 2012-11-29T15:12:50.790 回答