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 传了两次 虽然无所谓 但是内心还是有一点点不爽的

上代码

python闭包

 

 

python闭包

我们分别查出来了 三条List数据 1user 2ops_user 3 project 并且都转换成了dict

现在我们需要置换 ops_user 里的项目id 和 user_id

python闭包

 

我们发现外层函数只调用一次

内层分别传的都是ops_user_dict 这个list

发现参数中少了一个参数就是 结果的list    

我们一步一步来说

我们首先给外层函数传参 我们的结果值ops_user_dict

此时内层函数会记住外层函数的变量

此时我们传入两次需要置换的name

为何没有写参数去接 

python中list传的都是引用他不是int不是str这里我就不详细做解释

有兴趣的可以去搜下 在python中 a,b = b,a 为什么可以执行