将函数返回值赋值给problem_words_dict变量,再将变量作为参数,调用函数,再次赋值给该变量,第二次赋值失败
可看代码注释
def word_remember(dict_, problem_words={}):
# 过程省略
return problem_words
def __main__():
problem_words_dict = word_remember(dict_) # 假设此处返回值是a
problem_words_dict = word_remember(problem_words_dict) # 返回值还是a,赋值失败
print(problem_words_dict)
__main__()
如何解决?
因为python函数参数的默认值是在创建函数时就生成了的,并保存在函数内部,而不是调用函数时再生成。
当第一次调用函数对默认值的字典添加了内容,下一次再调用函数时默认值的字典还是上次添加了内容的那个,而不是再生成一个新的字典。
如果函数参数的默认值是数值或字符串类型,属于不可变类型,没什么问题
如果是字典和列表,属于可变类型,就会有上述的问题
应该改成这样在函数内每次都创建一个新的字典
def word_remember(dict_, problem_words=None):
if problem_words==None:
problem_words={}
# 过程省略
return problem_words
是不是word_remember()函数内部出错了
改为传指针