如何在Python中检查变量是否为空?

32

我想知道Python是否有类似于PHP empty函数(http://php.net/manual/en/function.empty.php)的函数,该函数可以按照以下条件检查变量是否为空。

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
5个回答

26

可以参考之前的回答,建议使用not关键字。

如何在Python中检查列表是否为空?

这适用于不仅仅是列表:

>>> a = ""
>>> not a
True

>>> a = []
>>> not a
True

>>> a = 0
>>> not a
True

>>> a = 0.0
>>> not a
True

>>> a = numpy.array([])
>>> not a
True

值得注意的是,它不能用于字符串"0",因为字符串实际上包含了一个包含"0"的字符。对于这种情况,您必须将其转换为整数:

>>> a = "0"
>>> not a
False

>>> a = '0'
>>> not int(a)
True

1
not 不是一个命令,而是一个关键词。它也不是一个函数,所以你不需要(也不应该)使用括号。 not 也会隐式地转换为布尔值然后取反;你并不总是想要取反来获取一个布尔值。 - agf
感谢 @agf。已在帖子中进行了更正。 - kitchenette

23

是的,bool。它不是完全相同的--'0'True,但NoneFalse[]00.0""都是False

在条件语句中(例如ifwhile语句,条件表达式或布尔运算符),当您评估对象时,将隐式使用bool

如果你想像PHP一样处理包含数字的字符串,你可以做这样的事情:

def empty(value):
    try:
        value = float(value)
    except ValueError:
        pass
    return bool(value)

8

只需要使用not关键字:

if not your_variable:
    print("your_variable is empty")

对于你的 0 as string,使用以下代码:

if your_variable == "0":
    print("your_variable is 0 (string)")

将它们合并:

if not your_variable or your_variable == "0":
    print("your_variable is empty")

Python强调简洁,这个回答也是如此 :)


4
请参阅第5.1节:http://docs.python.org/library/stdtypes.html 任何对象都可以测试其真值,在if或while条件中使用,或作为以下布尔运算符的操作数。以下值被视为假: None False 任何数字类型的零,例如,00L0.00j
任何空序列,例如,''()[]
任何空映射,例如,{}
如果类定义了__nonzero__()__len__()方法,并且该方法返回整数零或bool值False,则用户定义类的实例也被视为假 [1]。
所有其他值都被视为真 - 因此许多类型的对象始终为真。
具有布尔结果的操作和内置函数始终返回false的0False,并且true的1True,除非另有说明。(重要例外:布尔运算orand总是返回它们的操作数之一。)

这并没有完全回答他的问题,“我想知道Python是否有类似于PHP empty函数的功能”。这告诉他“empty”的含义,但并没有告诉他如何判断任意对象是否为空。 - agf
我想我的回答意味着文档中有一个完整的部分解释了“什么是‘空’”。我认为在这个问题的三个答案之间,我们已经详尽地讨论了大多数使用情况。 - jgritty

0

你可以使用 not 关键字。

if not a
    print("a is empty")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接