"if not" 在这里是什么意思?

What does "if not" mean here?

 def santa(*says):
    if not says:
        return "ho! xmas!"
    else:
        return says[0]+"! "+santa(*says[1:])

这是一个具有位置参数语法的递归函数,这让我难以理解。 “if not says”是什么意思?它等于“if says == False”吗?还是“if says is None”?因为如果我用两者中的任何一个替换它,它就会出错。

如何 link 到:

print(santa())

没有参数和输出

"ho! xmas!"

表示满足第一个条件语句。

基本上是检查says是否有任何值。对对象的 if 检查检查该对象的真值。 says 在这里将是一个元组。元组在 if 中是 True 检查它们是否有任何值。所以实际上这是在检查 says 是否为 (not) 非空。

如果您感兴趣,文档有更多详细信息:https://docs.python.org/2.4/lib/truth.html

def santa(*says):
    if not says:
        return 'ho! xmas!'

所以我们这里有一个接受任意输入列表的函数定义。该函数做的第一件事是检查列表是否为空。然后returns一个格式化的短语,结束函数。

您可能已经知道这一点,但是 if 语句检查布尔语句的结果并相应地设置程序流。在这种情况下,布尔语句是 not sayssays 是传递给函数的任意列表。由于 Python 中的每个对象都有一个布尔结果,因此作为列表对象的 says 也有一个布尔结果。如果为空,则结果为 false。如果它不为空,则结果为 true.

因此,如果 says 为空,if not says: 将继续 true 路径,因为 not 限定符,如果 false 路径 says 不为空。

更多关于 Python 真实性的信息可以在这里找到:https://docs.python.org/2/library/stdtypes.html#truth-value-testing

在 Python 中,空元组在布尔上下文中的计算结果为 False。这可以通过将空元组转换为布尔值来看出:

>>> says = ()
>>> bool(says)
False
>>> 

这意味着语句 if not says 正在测试是否使用 not 运算符通过 says 将任何参数传递给函数。这是一个例子:

>>> says = ()
>>> not says
True
>>> 

因此,当您在不带任何参数的情况下调用 santa() 时,第一个 if 语句的计算结果为 True,并返回 "ho! xmas!"