文章目录

  • 封装 - 数据隐藏
  • 贯彻 DRY 原则
  • 深入浅出python闭包

嵌套函数(Nested function)是在另一个函数(即:封闭函数)中定义的函数。

那么,一般在什么情况下使用嵌套函数?

  • 封装 - 数据隐藏
  • 贯彻 DRY 原则
  • 闭包

除此之外,嵌套函数还有其他用法,只不过这些是比较常用的。另外,闭包的内容较为丰富,后面做单独分享。

封装 - 数据隐藏

可以使用内层函数来保护它们不受函数外部变化的影响,也就是说把它们从全局作用域隐藏起来。

来看一个简单的例子 - 求一个数字 n 的倍数:

>>> def outer(n):
...     def inner_multiple(n):  # 从外部代码隐藏
...         return n * 2
...     num = inner_multiple(n)
...     print(num)
...
>>>

尝试调用 inner_multiple(n) 会引发错误:

>>> outer(5)
10
>>>
>>> inner_multiple(5)  # 外部无法访问
...
NameError: name 'inner_multiple' is not defined

这是因为它被定义在 outer() 的内部,被隐藏了起来,所以外部无法访问。

贯彻 DRY 原则

DRY(Don’t Repeat Yourself)- 是指在程序设计以及计算中避免重复代码,因为这样会降低灵活性、简洁性,并且有可能导致代码之间的矛盾。

DRY 更多的是一种架构设计思想,在软件开发过程中的万事万物均可能重复,大到标准、框架、开发流程;中到组件、接口;小到功能、代码均纯存在自我重复。而 DRY 提倡的就是在软件开发过程中应消除所有这些自我重复。

深入浅出python闭包

闭包概念:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。举个栗子先:


在函数startAt中定义了一个incrementBy函数,incrementBy访问了外部函数startAt的变量,并且函数返回值为incrementBy函数,注意python是可以返回一个函数的,这也是python的特性之一。


上面代码中a其实就是一个函数,上面代码执行的结果:


从结果我们不难看出,a是函数incrementBy而不是startAt这个有点绕,但是并不难理解,因为return回来的是incrementBy函数。


输出是:

如果调用函数a的话,得到的结果是传入参数的整数值加。

Python的嵌套函数使用和闭包相关推荐

  1. python中msg函数_Python 中闭包函数和装饰器

    一.闭包函数的概述 闭包 closure, 是一种代码的组织结构.当一个内嵌函数引用其外部作用域的变量,就形成一个闭包函数.闭包函数有一个内嵌函数,内嵌函数引用外部函数中的变量,外部函数的返回值是内嵌 ...

  2. python中嵌套函数的应用实例-实例详解python函数的对象、函数嵌套、名称空间和作用域...

    函数的对象 python中一切皆对象 函数对象的四大功能 引用 def f1(): print("from f1") f1() #调用函数 print(f1) print(&quo ...

  3. python基础(7)-函数命名空间作用域闭包

    函数 动态参数 *args 1 def sum(*args): 2 ''' 3 任何参数都会被args以元组的方式接收 4 ''' 5 print(type(args)) # result:<c ...

  4. python外部嵌套作用域Enclosing 与 闭包

    外部嵌套作用域示例 def fun01():a = 10def fun02():print(a)fun01() #不会打印出a def fun01():a = 10def fun02():print( ...

  5. Python基础教程:嵌套函数、闭包

    嵌套函数 在函数中定义另一个函数称为嵌套函数. 嵌套函数可以访问包围范围内的变量. def print_msg(msg):def printer():print(msg)printer()print_ ...

  6. python函数def里面嵌套def_python 函数嵌套函数_Python中的嵌套函数

    python 函数嵌套函数 A nested function is simply a function within another function, and is sometimes calle ...

  7. python嵌套函数具体案例_python编程嵌套函数实例代码

    python,函数嵌套,到底是个什么东东? 很少有人用,但是,有时确实会用: def multiplier(factor): def multiplyByFactor(number): return ...

  8. 为什么戏说php,戏说PHP的嵌套函数

    PHP很早就支持嵌套函数了.并是不PHP5.3有闭包时才有的.然而,它却不是象JS,AS那样的闭包嵌套.即它的嵌套函数根本无闭包模式的逃脱. PHP嵌套函数有一些特别之处.最特别的是,当外部函数被调用 ...

  9. python高阶函数闭包装饰器_Python_基础_(装饰器,*args,**kwargs,高阶函数,函数闭包,函数嵌套)...

    一,装饰器 装饰器:本质就是函数,功能是为其它的函数动态添加附加的功能 原则:对修改关闭对扩展开放 1.不修改被修饰函数的源代码 2.不修改被修改函数的调用方式 装饰器实现的知识储备:高阶函数,函数嵌 ...

最新文章

  1. c++ 判断数学表达式有效性_C运算符和表达式、if判断、switch与逻辑运算、循环语句...
  2. LA3971组装电脑
  3. 文巾解题 292. Nim 游戏
  4. 【c++】1.const和constexpr相关知识
  5. webpack从入门到精通(三)生产环境的基本配置
  6. 【干货·课程】言有三的深度学习从入门到上线课程
  7. 2021 届校招宣讲会来啦!神策数据,与你一起「数说」未来
  8. Perl split字符串分割函数用法指南
  9. 软件项目管理的质量保证
  10. 使用IntelliJ IDEA 2019.3.2 x64 远程连接oracle数据库
  11. python模块matplotlib.pyplot用法_Python中Matplotlib模块的简单使用
  12. JavaScript中用var和不用var的区别
  13. SAP License:SAP PFCG或SEARCH_SAP_MENU文本乱码
  14. 素描滤镜c语言算法,python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现).pdf...
  15. N60E-O发布 不同CPU或将改变服务器市场?
  16. font-spider(字蛛) 让页面引入中文web字体
  17. SSM订单数据管理系统
  18. FIRST 和 FOLLOW求解
  19. 数据结构(三)—— 树(1):树与树的表示
  20. 深圳计算机学校排名2015年,2015深圳各区初中最新排名,10各区学校都有

热门文章

  1. pytorch 多进程读写同一个文件
  2. pip install 另一个程序正在使用此文件,进程无法访问
  3. libdgl.dll WinError 126
  4. elasticsearch 后置过滤器(Post Filter)
  5. elasticsearch collapse折叠聚合
  6. matlab 图像操作函数的详解
  7. h5 右下角浮动按钮_【js】右下角浮动窗口
  8. 将单词的首字母转换成大写
  9. 搜寻文件下包含某个字符串的文件
  10. DuiLib——xml节点元素属性介绍