【发布时间】:2017-04-21 16:40:00
【问题描述】:
我有一个删除词尾标点符号的功能
def clean(word):
if word[-1].isalpha():
return word.lower()
else:
word = word[:-1]
clean(word)
例如,如果我运行print(clean('foo!!!')),该函数将打印None。但是,如果我在函数中将return 更改为print:
def clean(word):
if word[-1].isalpha():
print(word.lower())
else:
word = word[:-1]
clean(word)
然后函数打印foo。为什么return 和print 在这种情况下会有区别?
【问题讨论】:
-
您的函数并不是真正的递归。第一个示例中的最后一行应该是
return clean(word)。然后它将按您的预期工作。 -
@juanpa.arrivillaga 对此有更好的复制;更容易提取您需要的信息。
-
Patrick 已经给出了最准确的解释……我不认为这与那些完全一样……
-
正确的问题是为什么函数返回
None。这可以通过查看其所有代码路径来回答。 -
@PatrickHaugh 我不会说它不是真正递归的,它只是不会返回任何有用的东西,也没有任何有用的副作用。