最近相对来讲比较清闲,所以能用一点时间找一些有意思的东西出来,因为之前在用python写一个简单的mysql访问类的时候想用一下单例,所以从网上copy了很多代码。有些代码用到了python的嵌套函数,但是秉着不熟悉的东西会出错的错误思想,我放弃了用那种看起来更为高大上一点的用法,转而用了一种简单的写法,今天又在一个地方看到了函数嵌套这种用法,觉得很有意思,因为在编译语言中很少见到,决定研究一下。
python的嵌套函数,单一参数时返回内函数,也就是说,假设嵌套N层,那么给定M个参数,返回的就是第N-M层的函数体。那都是后话,返回N层,实际上不好操控,用处也不大。我来着重看一下单一嵌套的时候,嵌套函数是怎样表现的。
打个比方,有一个二维度的需求的场景,二维度这个词是我自己定义的,代表着一个需求可能有两种变数,简单的来讲,比如加法。
如果我们想写加法,怎么写?easy,比如我想写一个将0~100之内的所有数加一起,可能最简单的写法可能就是下面这种:
结果大家可能都知道,高斯的经典故事 5050:
如果我想将这个0和100两个数换掉,那么就需要改代码,写一个简单的带有两个参数的函数,如下图:
这样的函数可能是需要一个数字的开头,一个数字的结尾,可以称作一个最简单的二维度的需求,那么,这样一个需求和嵌套函数有什么关系那?看下面这段代码,将累加换成了乘法,但是本质没有改变:
这是一个嵌套函数,那么按照上面的逻辑,我在调用这个函数的时候给定了一个参数,返回的会是一个函数:
函数名,addInner有没有!相当于返回的是内部函数,如果换一种写法来看:
结果是什么?
执行的结果就是5*6,5*4,这很像我们定义了一个类之后,实例化之后对类内函数进行调用的一个过程,首先我们将num1初始化为5,然后返回了一个很类似于c语言中函数指针的玩意儿,实际是内置函数的一个引用,属于变量,这样我们利用这个引用再调用,那么num2就被赋值了,整个过程完成。
瞬间感觉这个东西很强大有木有!?
没有感觉?
那么再来一些复杂的例子:
第一个:
先解释一下这段代码,这段小代码里面有3个函数,作用是动态扩展一个“人”的属性字段。
下面两个函数是验证函数,第一个函数前加了一句@initMan,有必要解释一下@,在python中叫做装饰器,initMan经过修饰以后变成了装饰函数,经过装饰函数的修饰,调用printManWithDecorate(person)实际上变成了printManWithDecorate = initMan(printManWithDecorate(person),所以,对每个人信息的打印过程中,调用printManWithDecorate与调用printMan看起来似乎没什么不同,但是实质上是完全不同的,我们先来看一下结果:
如我们所料,两次调用的效果完全不同。
这种场景似乎在哪里见过?yep,java里面的装饰模式即是这种逻辑,没差,基本完全一样。这样的装饰同样可以叠加,但是与java不同的是,这种叠加是有顺序的,毕竟主体是函数而不是类,但是这种模式更加的精炼与轻量级,并且能够完成装饰模式的大多数作用,更加验证了我之前看到过的一句话:python是一个函数为王的语言。这是一种更加贴近c语言的面向对象的解释语言。
下期:python类加载

python的函数嵌套机制相关推荐

  1. PYTHON:函数嵌套函数的用法

    python: Def函数内嵌套另一个Def函数有什么用 这是一种进阶用法,简单来说,定义一只母鸡?,返回一个鸡蛋?,最后这鸡蛋还能浮出一只小鸡? 用一个例子说明: 定义一个方程: f = a x f ...

  2. 跟着太白老师学python day10 函数嵌套, global , nonlocal

    函数嵌套: 第一种嵌套方法 def func():count = 123def inner():print(count)inner() func() 第二种嵌套方法 count = 123 def f ...

  3. python 函数嵌套 报错_《Python》 函数嵌套、闭包和迭代器

    一.函数的嵌套: 1.函数的嵌套调用 defmax2(x,y): m= x if x>y elseyreturnmdefmax4(a,b,c,d): res1=max2(a,b) res2=ma ...

  4. python基础之函数嵌套定义

    博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...

  5. python中的嵌套例题_Python函数嵌套实例

    在Python中函数可以作为参数进行传递,而也可以赋值给其他变量(类似Javascript,或者C/C++中的函数指针): 类似Javascript,Python支持函数嵌套,Javascript嵌套 ...

  6. Python: 函数参数传递机制

    Python: 函数参数传递机制 Python函数参数由实参传递给形参的过程,是由参数传递机制来控制的,根据实际参数类型不同,函数参数传递方式分为值传递和引用传递(又称为地址传递). 值传递机制 所谓 ...

  7. python 函数修饰器 父类_Python函数嵌套、回调函数、闭包、装饰器和类

    markdown内容:Python函数嵌套.回调函数.闭包.装饰器和类 一级标题:主要描述内容 二级标题:各个内容 三级标题:重要概念 一.函数嵌套 1.1.作用域和嵌套函数 LEGB查找规则的 E, ...

  8. python函数的用法详解(作用、定义、调用、函数参数、函数返回值、函数说明文档、函数嵌套使用)

    1. 函数的作⽤ 函数就是将⼀段具有独⽴功能的代码块整合到⼀个整体并命名,在需要的位置调⽤这个名称即可完成对应的需求. 函数在开发过程中,可以更⾼效的实现代码重⽤. 2. 函数的使⽤步骤 2.1 定义 ...

  9. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

最新文章

  1. 干货丨人工智能、机器学习和认知计算入门指南
  2. 检测IIS应用程序池对象 回收
  3. 第三章 Matlab数组
  4. CentOS 6.3安装(详细图解教程)
  5. vb 绘制图形/蝴蝶动画
  6. springMVC_07乱码及restful风格
  7. 【.NET Core 跨平台 GUI 开发】第一篇:编写你的第一个 Gtk# 应用
  8. linux nona怎么用_nano命令_Linux nano 命令用法详解:字符终端文本编辑器
  9. python 聚类_聚类算法中的四种距离及其python实现
  10. 深度学习(一)神经网络中的池化与反池化原理
  11. pivot sqlserver 条件_SqlServer行转列(PIVOT),列转行(UNPIVOT)总结
  12. python 输出语句
  13. 黑鲨官网装机大师工具如何制作u盘启动盘,u盘启动盘制作方法
  14. gimp中文版教程_Gimp中文经典入门实用教程(合辑).pdf
  15. 电子海图信息系统 (ECDIS)的发展及应用
  16. Word vba 替换
  17. MATLAB Smoothing Spline 拟合
  18. 科目二考试全流程详解
  19. Replication Failed to register VRMS. Operation ID: bef61197-acf3-46ac-bffd-d457
  20. 怎么把苹果手机通讯录导入华为手机_怎么恢复手机通讯录?最完整手机通讯录恢复方法大公开...

热门文章

  1. 第3篇:银行Java站SSRF“组合洞“打法造成的严重危害
  2. SaaS:光环难掩四大隐患 先驱者或成捐躯者
  3. DS实验题 击鼓传花
  4. 计算机叫醒服务英语,关于酒店叫醒服务的英文口语
  5. FLUENT中MRF模型简介及应用实例
  6. 【Linux】理解文件系统——软硬链接
  7. 科技爱好者周刊(第 134 期):未来的游戏业比现在大100倍
  8. 云计算之OpenStack架构详解
  9. 反渗透设备:反渗透纯净水处理设备特点
  10. JVM的基本结构及其各部分详解(一)