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!"
意味着它满足第一个条件语句。
答案 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 says
。 says
是传递给函数的任意列表。由于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!"
。