def word_to_syllable(w,li=[]):
if not w:
return li
pattern = """
########
"""
pattern = re.sub("C","[^aeiou]",pattern)
pattern = re.sub("V","[aeiou]",pattern)
match = re.findall(pattern,w,re.VERBOSE)[0]
#print(li)
li.append(match)
w = w[len(match):]
return word_to_syllable(w,li)
这在第一次调用时可以正常工作,但是局部变量li
不会被遗忘,新值只是附加到旧值 - 而不是字符串,正如函数名称所暗示的那样,被拆分到它自己的列表中。是的,如果我在没有默认参数的情况下定义我的函数,而是在稍后的调用中说它是空列表,一切都很好,但我很好奇上面这段代码到底发生了什么。