这个 Python 表达式有意义吗?

Posted

技术标签:

【中文标题】这个 Python 表达式有意义吗?【英文标题】:Does this Python expression make sense? 【发布时间】:2012-11-17 16:42:59 【问题描述】:

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

if variable is not None:
    dothings(variable)

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

if variable:
    dothings(variable)

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

【问题讨论】:

【参考方案1】:

variable 可以是0,或False,或[],或();换句话说,是 'falsy',然后 if 语句将被跳过。

请参阅Truth testing 了解有关在布尔上下文中被认为是错误的更多详细信息。

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

【讨论】:

所以,.... "A is not B" 与 "A is not B" 不同,Python 应用前者。不是吗? is notis 的倒数,是的。见docs.python.org/2/reference/expressions.html#not-in。你也可以说not A is B【参考方案2】:

有些值是假的,但不是None。您可能仍希望 dothings() 获得这些值。

Here are the things that are falsy in Python 2.(您可能希望将 URL 中的“2”更改为“3”以获取 Python 3 的值,但变化不大。)

【讨论】:

【参考方案3】:

例如

i = 0

if i is not None:
    print i    # prints i

if i:
    print i    # prints nothing

【讨论】:

【参考方案4】:

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

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 之外的任何内容。与我上面所说的类似,所有“登录功能”所做的是确定用户是否传递了任何内容,而不是该值是否有效、真实等。

【讨论】:

以上是关于这个 Python 表达式有意义吗?的主要内容,如果未能解决你的问题,请参考以下文章

Python中的弃用警告,在这里有意义吗?

如果(!这个)返回; 在 C# 中有意义吗?

这个 RPC xdr 副本有意义吗?

应用程序范围的异常处理程序有意义吗?

将 NSString 对象设置为零有意义吗?

使用 OR-Mapper 有意义吗?