python闭包浅见
2024-09-08 08:12:27
1、个人理解定义:在一个函数A内部定义一个函数B,并在定义的内部函数B内对这个函数A的变量进行引用,那么内部函数B就是闭包。
2、特性:在内部函数内不能对A函数的变量进行更改 (但是可以将其封装到一个容器内,如列表,再对其进行更改即可)
3、应用场景:函数上次运行结果作为此次函数参数调用
def power(x): # x表示次方
def number(y): # y表示要计算x次方的数
product = y**x
return product
return number p2 = power(2)
p4 = power(4)
print '2的2次方: ',p2(2)
print '2的4次方: ',p4(2)
print '2.5的2次方:',p2(2.5)
4、返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。如果一定要引用循环变量那就再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变
def count():
fs = []
for i in range(1,5):
def f(j): # 用于绑定循环变量的函数
def g():
return j*j
return g
fs.append(f(i))
return fs for i in count():
print i() 输出:1,4,9,16
最新文章
- openvpn安装
- Mac地址泛洪攻击的防御措施和具体配置
- Yii2 事务
- ArcGIS 10.1 中的style和serverstyle及制作方法
- bzoj 2588 Spoj 10628. Count on a tree(主席树)
- 《深入剖析Tomcat》阅读(一)
- 新手入门 acm 输入输出练习
- postgresql数据库的数据导出
- iOS子线程更新UI的两种方法
- Latex:入门教程
- dom反转
- WPF仿网易云音乐系列(二、歌单创建窗口+登录设置模块)
- C++ 虚函数表解析 继承
- mysql学习(3)10045错误,连接不上数据库
- <;转>; 解决异常:IllegalStateException: Fragment <;ThisFragment>; is not currently in the FragmentManager
- Linux和Windows中查看端口占用情况
- 【Oracle】Oracle常用语句集合
- js来监控复制粘贴
- ESP32D0WDQ6 灯泡 黑客
- 【刷题】UOJ #79 一般图最大匹配