关于#函数返回#的问题,如何解决?

问题遇到的现象和发生背景

将函数返回值赋值给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

条件太少,无从下手

img

img

是不是word_remember()函数内部出错了

改为传指针