0
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
不知何故没有被人遗忘,新价值只是附加到旧的 - 而不是字符串,作为函数的名称所暗示的,被分割到它的自己的名单。是的,如果我在没有默认参数的情况下定义我的函数,而是在调用后面说它是空列表,那么一切都很好,但我很好奇上面这段代码究竟发生了什么。为什么局部变量在这种情况下被“记住”?
那么,你可以使用它,它会工作,也许不像预期的那样。 – fjarri
@Bogdan对,澄清。 –
感谢您的回答,并为链接。 “一旦你思考这种方式,那么它就完全有意义:函数是一个正在被定义的对象;默认参数是”成员数据“,因此它们的状态可能会从一个调用改变到其他 - 与其他任何对象一样“(从那里的最佳答案,很好的解释!) – user2921960