python闭包
最近看了一些文章决定对于闭包在做一次新的笔记
闭包是什么?
两层函数 外层函数的返回值是内层函数的引用
举例而说 我们在工作中 经常会用到id置换name
如果一个表里出现四五个id需要置换出来name然后返回
假设你要这么写
result = id_sub_name()
result = id_sub_name()
result = id_sub_name()
result = id_sub_name()
result = id_sub_name()
你要写五次 而且 id 置换name 和被置换list中name 然后 你的结果result 和 你需要从哪个list中找到这个被需要置换的字段
参数很多.
我们在写代码时候宗旨就是不写重复代码 虽然只有一点点 但是可以用闭包做到更好
假如我现在有两个需要置换的
一个是user name 一个是项目名称
以前的写法
result = id_sub_name = ("user_id", "user_name", "sub_name", "result", "users_dict")
result = id_sub_name = ("project_id", "project_name", "sub_name", "result", "projects_dict")
可以发现 每次调用的时候result 传了两次 虽然无所谓 但是内心还是有一点点不爽的
上代码
我们分别查出来了 三条List数据 1user 2ops_user 3 project 并且都转换成了dict
现在我们需要置换 ops_user 里的项目id 和 user_id
我们发现外层函数只调用一次
内层分别传的都是ops_user_dict 这个list
发现参数中少了一个参数就是 结果的list
我们一步一步来说
我们首先给外层函数传参 我们的结果值ops_user_dict
此时内层函数会记住外层函数的变量
此时我们传入两次需要置换的name
为何没有写参数去接
python中list传的都是引用他不是int不是str这里我就不详细做解释
有兴趣的可以去搜下 在python中 a,b = b,a 为什么可以执行