count中的lenRecur是而不是全局的。它是一个作用域变量。
在这样做之前,您需要使用Python 3;您正在寻找添加到python3的^{} statement。
在Python2中,您可以通过为count使用可变(如列表)来解决此限制:def lenRecur(s):
count = [0]
# ...
def leng(s):
if len(s)==0:
return count[0]
else:
count[0] += 1
return lenIter(s[1:])
现在,您不再改变count名称本身;它保持不变,继续引用同一个列表。您所要做的就是改变count列表中包含的第一个元素。
另一种“拼写”方法是将count设为函数属性:def lenRecur(s):
# ...
def leng(s):
if len(s)==0:
return leng.count
else:
leng.count += 1
return lenIter(s[1:])
leng.count = 0
现在count不再是lenRecur()的本地;它已成为不变的lenRecur()函数的属性。
对于你的具体问题,你实际上是想得太多了。只要递归求和:def lenRecur(s):
def characters_only(s):
return ''.join([c for c in s if c.isalpha()])