“如果没有”在这里意味着什么?

时间:2017-06-02 17:04:58

标签: python function if-statement conditional

 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”?因为如果我用两者中的任何一个替换它,它会给出错误。

如何链接到:

print(santa())

没有参数和输出

"ho! xmas!"

意味着它满足第一个条件语句。

3 个答案:

答案 0 :(得分:0)

它基本上检查says是否有任何价值。 if检查对象是否检查该对象的真值。 says将是一个元组。如果它们具有任何值,则检查元组是True。因此,实际上这是检查says是否为not非空。

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

答案 1 :(得分:0)

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

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

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

如果if not says:由于true限定符而为says为空,那么not将会在false路径上,says路径为initialize()不是空的。

有关Python真实性的更多信息,请访问:https://docs.python.org/2/library/stdtypes.html#truth-value-testing

答案 2 :(得分:0)

在Python中,空元组在布尔上下文中求值为False。通过将空元组转换为布尔值可以看出这一点:

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

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

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

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