1.高阶函数: 由于python中一切皆对象,变量是对象,函数也是对象,函数也能像变量那样进行传递。一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

函数名是函数对象的引用,即函数名也是变量,函数名后面加上()就是表示执行函数。

1)函数作为参数

def bar():print("in the bar..")def foo(func):func()print("in the foo..")foo(bar)

2)返回值为函数

def bar():print("in the bar..")def foo(func):print("in the foo..")return barres = foo(bar)
res()

2. 函数嵌套: 在一个函数中定义了另外一个函数,当外部函数被调用的时候,内部函数都会被重新定义,如果内部函数不被返回,则外部函数执行结束后,

内部函数对象就会被销毁。下面举一个简单的例子:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def test1():age = 10print(age)def test2():te = 5print(age)def test3():print(te)test3()test2()test1() # 10 10 5

注:由于每次内部嵌套函数都会重新定义,所以对于频繁使用的函数是不建议其内部定义嵌套函数的,否则效率低。

3. 闭包:

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

所以闭包是既符合高阶函数,又满足嵌套函数。

一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,

如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def outer(a):b = 10            # a 和 b 都是外函数的临时变量def inner():a = a * 2print(a + b)  # 在内函数中用到了外函数的临时变量return inner      # 外函数的返回值是内函数的引用# 调用外函数传入参数5
# 此时外函数两个临时变量 a = 5 b = 10 ,并创建了内函数,然后把内函数的引用返回存给了 demo
# 外函数结束的时候发现内部函数将会用到自己的临时变量,这两个临时变量就不会释放,会绑定给这个内部函数
demo = outer(5)
demo()  # 15
demo2 = outer(7)
demo2() # 17

闭包中内函数修改外函数局部变量:

  • 在闭包内函数中,我们可以随意使用外函数绑定来的临时变量,但是如果我们想修改外函数临时变量数值的时候发现出问题了!

  • 在基本的python语法当中,一个函数可以随意读取全局数据,但是要修改全局数据的时候有两种方法:

1) global 声明全局变量,否则赋值操作是重新定义一个变量

2)全局变量是可变类型数据的时候可以修改

  • 在闭包内函数也是类似的情况。在内函数中想修改闭包变量(外函数绑定给内函数的局部变量)的时候:

1)在python3中,可以用 nonlocal 关键字声明一个变量, 表示这个变量不是局部变量空间的变量,需要向上一层变量空间找这个变量。

2)在python2中,没有 nonlocal 这个关键字,我们可以把闭包变量改成可变类型数据进行修改,比如列表。

def outer(a):b = 10c = [a]def inner():nonlocal b  # 这样就可以修改闭包变量 b 了b += 1c[0] += 1   # 通过可变类型对象也可以实现修改print(c[0])print(b)return innerdemo = outer(5)
demo() # 6  11

Python高阶函数和函数嵌套相关推荐

  1. python高阶:魔法函数

    概述: 动态的语言:Python作为一种动态的语言,底部采用的是鸭子模型的机制,即:当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子. 在鸭子类型中,关注的不是对象 ...

  2. python四大高阶函数_详谈Python高阶函数与函数装饰器(推荐)

    一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首 ...

  3. 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数

    高阶函数 将函数作为参数传入,这样的函数称为高阶函数.函数式编程就是指这种高度抽象的编程范式. 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函 ...

  4. 快速记忆python函数-【速学速记】Python 高阶函数

    原标题:[速学速记]Python 高阶函数 前言: python 迅速发展壮大起来,多亏了人工智能,AI ,机器学习,深度学习的发展.所以小的给各位看官们准备了收藏已久的视频教程分享给大家!希望能带给 ...

  5. python高阶函数filter_python 高阶函数之filter

    前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter. 先看一下filter() 函数签名 >>> ...

  6. python高阶函数map_简单了解python高阶函数map/reduce

    高阶函数map/reduce Python内建了map()和reduce()函数. 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每 ...

  7. python高阶函数(三分钟读懂)

    python高阶函数(三分钟读懂) 函数式编程 Python中,函数是一等对象 一等对象:具有特点 ① 对象是在运行时创建的 ② 能赋值给变量或作为数据结构中的元素 ③ 能作为参数传递 ④ 能作为返回 ...

  8. python高阶函数——sorted排序算法

    python高阶函数--sorted排序算法 python 内置的sorted()函数可以对一个list进行排序: >>> sorted([8,3,8,11,-2]) [-2, 3, ...

  9. Python学习(十)——高阶内置函数

    内置函数 内置函数 高阶内置函数 abs().sum().round() map() filter() sorted() max().min() 内置函数 内置函数:python提供的,可以直接使用 ...

  10. python高阶_Python高阶学习

    学习目录阿力阿哩哩:深度学习 | 学习目录​zhuanlan.zhihu.com 上一期我们讲到阿力阿哩哩:Python进阶学习​zhuanlan.zhihu.com 3.4 Python高阶学习 3 ...

最新文章

  1. 【kissfft】使用kiss_fftr做FFT与iFFT
  2. Human centered design and design thinking
  3. 经典排序算法(9)——桶排序算法详解
  4. 拳王虚拟项目公社:通过信息差获免费取虚拟资源,网上怎么售卖教程赚钱
  5. 三种常见的图像处理双三次插值算法
  6. 用“无线诊断”工具解决 Mac 出现的 WiFi 连接问题
  7. 那些不得不提的坑(持续添加中)
  8. ASP.NET MVC - 使用Post, Redirect, Get (PRG)模式
  9. 如何下载STM32某型号MCU的数据手册(datasheet)
  10. iphone 3G 刷机错误解决集锦
  11. ubuntu添加windows字体
  12. 电总协议串口调试助手
  13. 【软件测试】8年资深测试解析,软件测试行业情报,风风雨雨......
  14. vivo手机解析包错误解决方式
  15. 无线通信安全作业1-无线通信安全最新消息
  16. 正易判讀 6-3 韓長庚 著
  17. 席育凡-软件研发文章
  18. http://www.baidu.com
  19. 12款福克斯后座中置灯加开关
  20. 【源码】基于MATAB的全要素生产率工具箱

热门文章

  1. 读书笔记:锋利的JQuery
  2. 7、单向一对多的关联关系(1的一方有n的一方的集合属性,n的一方却没有1的一方的引用)...
  3. hdu 4350 2012 多校 - 6
  4. 2008年毕业生第一份工作月薪工资大曝光
  5. 存储 萤石云_同时用过小米米家智能猫眼(带屏)与萤石dp1s智能门铃之后的感受...
  6. unity 继承会调用start吗_Unity 继承MonoBehaviour脚本 执行顺序 详解
  7. 关于mysql报 loopWaitCount 0, wait millis 60000 错误的解决办法
  8. JCO与bapi的联合使用
  9. LSMW批处理使用方法(11)_步骤14、15
  10. 1、Power View—使用前的准备