1.什么是闭包?

  内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。

def outer():n = 10def inner():print("inner:", n)return innerval = outer()
print(val)
val() 

闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

2.闭包再理解

  • 计算 y = a*x +b 的值
# 旧方法
def calc(a,b,x):return a*b+xprint(calc(1,2,3))   # y = 1*2+3
print(calc(2,3,4))

# 闭包方法
def outer(a,b):def calc(x):print(a*b+x)return calcval = outer(1,2)
print(val)
val(3)

这个例子中,函数line与变量a,b构成闭包。在创建闭包的时候,我们通过line_conf的参数a,b说明了这两个变量的取值,这样,我们就确定了函数的最终形式(y = x + 1和y = 4x + 5)。

我们只需要变换参数a,b,就可以获得不同的直线表达函数。由此,我们可以看到,闭包也具有提高代码可复用性的作用。

如果没有闭包,我们需要每次创建直线函数的时候同时说明a,b,x。这样,我们就需要更多的参数传递,也减少了代码的可移植性。

闭包思考:1.闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成
2.由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存

转载于:https://www.cnblogs.com/venicid/p/8431202.html

11-[函数进阶]-闭包相关推荐

  1. 11. 函数进阶-函数名,返回值,作用域

    11. 函数进阶 目标:掌握函数相关易错点 & 项目开发必备技能. 概要: 参数的补充 函数名,函数名到底是什么? 返回值和print,傻傻分不清楚. 函数的作用域 1.参数的补充 在函数基础 ...

  2. python 函数进阶-闭包函数

    闭包函数 什么是闭包函数 如果内函数使用了外函数的局部变量,并且外函数把内函数返回出来的过程叫做闭包,里面的内函数是闭包函数. # 外函数 outer def outer():# 外函数变量 numv ...

  3. 函数进阶---闭包/装饰器/迭代器/生成器---高级特性

    待完成... 转载于:https://www.cnblogs.com/py-coder/p/10037232.html

  4. Python 函数基础与进阶 闭包 聚合与打散

    阅读目录 函数基础 基础知识 return 返回值 不可变类型和可变类型的值传递问题 函数的参数 打散和聚合 函数进阶 函数的注释 命名空间 作用域和全局变量 函数的嵌套和作用域链 函数名 闭包 函数 ...

  5. 好好学python·函数进阶(递归函数,回调函数,闭包函数,匿名函数,迭代器)

    函数进阶 递归函数 回调函数 闭包函数 特点 匿名函数 lambda 表达式 迭代器 iter() next() 迭代器的取值方案 迭代器取值特点,取一个少一个,直到都取完,最后再获取就会报错 检测迭 ...

  6. javascript进阶课程--第三章--匿名函数和闭包

    javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...

  7. javascript函数进阶详细内容 函数闭包 箭头函数 call bind apply用法 偏函数 回调函数

    JS函数进阶 这次的内容我会给大家详细介绍函数方面的内容 1.箭头函数:ES6新增的定义函数的方式,箭头函数是用来简化函数定义语法的. - 箭头函数的语法: ()=>{} ()里面写形式参数,{ ...

  8. Python基础学习(七)--函数进阶,全局局部,global,nonlocal,enclosing,命名空间,作用域,重要函数,lambda,闭包

    函数进阶 一.函数参数类型 可变类型参数与不可变类型参数 不可变类型参数:数字.字符串.元组 可变类型参数:列表.字典.集合 (1)不可变类型参数 fun(a)–内部修改a的值,只是修改了一个对象的副 ...

  9. python内置函数与闭包_Python进阶(五)----内置函数Ⅱ 和 闭包

    Python进阶(五)----内置函数Ⅱ 和 闭包 一丶内置函数Ⅱ ####内置函数#### 特别重要,反复练习 ###print() 打印输入 #sep 设定分隔符 # end 默认是换行可以打印到 ...

  10. Python函数进阶(11)

    函数进阶 函数参数类型 不可变数据类型和可变数据类型自加的区别 1. 判断gl_num和gl_list的值 命名空间 作用域 全局变量和局部变量 global 和nonlocal关键字 内置函数 1. ...

最新文章

  1. amazon mws api 获取所有产品_Amazon’s Choice是什么?Amazon's Choice标签全解读
  2. 自学python需要多长时间-大家觉得自学python多久能学会?
  3. 【正则化】csdn markdown python 批量给文本行行头添加“•”符号,“- ”(实心圆)
  4. python requests post请求_Pythonrequest发送post请求
  5. yum安装源是出现报冲突错误,解决办法
  6. 使用dotnet Cli向nuget发布包
  7. HBase之Table.put客户端流程(续)
  8. Android 系统(21)---OPPO 刘海屏适配
  9. 如何成为一名真正专业的程序员
  10. 看单片机原理图-外部FLASHW25Q64
  11. ELDER-RAY (多头力度和空头力度)
  12. 当谈判处于下风怎么办?五大策略助你逆势翻盘
  13. maven使用c3p0——详细(很详细)
  14. 域服务器用户一直被锁,Windows Server 2019 域用户账户锁定策略
  15. PAT 甲级 A1010
  16. yml格式或者叫做YAML格式数据学习
  17. AndroidStudio安装JB系官方中文插件
  18. mysql驱动的依赖和spring jdbc依赖是什么关系
  19. 错误: expected declaration or statement at end of input
  20. 一文掌握物联网开发技能树

热门文章

  1. duilib入门简明教程 -- 部分bug (11) (转)
  2. 我的博客是怎么自定义的
  3. 动态规划--重拾我的“背包”
  4. 怎样去掉警告 log4j:WARN No appenders could be found for logger
  5. tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法...
  6. python如何输出两行_python pandas dataframe拆分行(某些行一行拆成多行)
  7. python中for和while区别_Python学习第九篇——while和for的区别
  8. 钉钉机器人发送图片 python_python封装钉钉Webhook机器人消息发送逻辑
  9. Scrapy安装介绍
  10. MFC中打开文件对话框:CFileDlg