Song200301090015 2022-06-22 13:47 采纳率: 100%
浏览 37
已结题

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

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

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

如何解决?

  • 写回答

4条回答 默认 最新

  • 天际的海浪 2022-06-22 19:03
    关注

    因为python函数参数的默认值是在创建函数时就生成了的,并保存在函数内部,而不是调用函数时再生成。
    当第一次调用函数对默认值的字典添加了内容,下一次再调用函数时默认值的字典还是上次添加了内容的那个,而不是再生成一个新的字典。
    如果函数参数的默认值是数值或字符串类型,属于不可变类型,没什么问题
    如果是字典和列表,属于可变类型,就会有上述的问题
    应该改成这样在函数内每次都创建一个新的字典

    def word_remember(dict_, problem_words=None):
        if problem_words==None:
            problem_words={}
        # 过程省略
        return problem_words
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月30日
  • 已采纳回答 6月22日
  • 赞助了问题酬金10元 6月22日
  • 创建了问题 6月22日

悬赏问题

  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 求帮看看那里的问题ssh项目报错
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统