在python中使用!var有任何陷阱吗?

时间:2013-12-28 09:59:14

标签: python

我想检查变量是否具有真值;在Python中做这样的工作有效地检查?或者是否有不同的惯例?

if not var:
  return False
return var * 2

4 个答案:

答案 0 :(得分:4)

如果变量为True,您可以使用以下语法检查它是否为True

>>> x = True
>>> if x:
...     print 'hey'
...     
hey

要检查变量是否为False,可以使用以下语法:

>>> x = False
>>> if not x:
...     print 'hey'
...     
hey

注意:在这些情况下无需使用bool()功能

答案 1 :(得分:2)

!不是Python中的否定; Python只使用常用布尔值的单词:

and(不是&&or(不是||not(不是!

一般来说:

  • 对于数字,非零值是真实的,而零是假的
  • 对于容器,空容器是假的(你也可以认为它等同于容器的len
  • None是假的
  • 任何类都可以使用自己的自定义行为
  • 定义__bool__方法

答案 2 :(得分:1)

最大的缺陷是Python中的许多东西都评估为布尔值。该文档包含(内置)类型如何tested for truth的完整列表。以下都评价为假。

  • 任何数字类型的零,例如,0,0L,0.0,0j。
  • 任何空序列,例如'',(),[]。
  • 任何空映射,例如{}。
  • 用户定义的类的实例,如果类定义了
  • 非零()或 len ()方法,当该方法返回整数零或bool值为False时。

为了让自己更轻松,请尝试将函数的返回类型限制为一种类型,并将异常情况表示为异常。

答案 3 :(得分:0)

关于你的例子的一个小提示。在某些情况下(与您的一样)进行if True检查更简单,更短:

if var:
    return var * 2

因为所有函数都在python中返回一个值。这对真值测试也很重要。如果方法或函数没有return语句,则返回None以上等同于

if var:
    return var * 2
return None