1.高阶函数:

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

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

1)函数作为参数

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

2)返回值为函数

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:579817333
'''
def bar():print("in the bar..")def foo(func):print("in the foo..")return barres = foo(bar)
res()

2.函数嵌套:

在一个函数中定义了另外一个函数,当外部函数被调用的时候,内部函数都会被重新定义,如果内部函数不被返回,则外部函数执行结束后,内部函数对象就会被销毁。

下面举一个简单的例子:

def test1():age = 10print(age)def test2():te = 5print(age)def test3():print(te)test3()test2()test1() # 10 10 5

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

3.闭包:

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

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

一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:579817333
'''
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基础-09 高阶函数

    高阶函数 一个函数作为另一个的返回值 def demo():print('我是test函数')return 'hello'def demo():print('我是demo函数')return test ...

  2. Python基础教程(七):函数、模块

    Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  3. python教程pdf-python基础教程[高清][中文第2版].pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython python基础教程[高清][中文第2版].pdf ...

  4. 莫烦Python[基础教程]

    python基础教程一 安装 定义功能 函数参数 函数默认参数 可变参数 关键字参数 变量形式 模块安装 文件读取 文件读取1 文件读取2 文件读取3 Class类 input输入 元组.列表.字典 ...

  5. python中的高阶函数

    python中的高阶函数 文章目录: 1 什么是高阶函数? 1.1 高阶函数:一个函数的`函数名`作为参数传给另外一个函数 1.2 高阶函数:一个函数返回值(return)为另外一个`函数` 2 py ...

  6. python核心,内建函数,高阶函数

    晨测 global和nonlocal区别 写一个递归的阶乘 回顾 1.global和nonlocal 关键字 2.函数的递归 1.查找规律 2.设置退出条件 3.性能 3.闭包 外函数中定义一个内函数 ...

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

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

  8. 【爆肝更新】Python基础教程:第五章_Python函数

    原创:公众号 数据说话 [爆肝更新]Python基础教程:第五章_Python函数 函数介绍 学习目标: 快速体验一下函数的使用 了解函数的作用. 函数:是组织好的,可重复使用的,用来实现特定功能的代 ...

  9. Scala编程基础——集合高阶函数

    Scala编程基础--集合&高阶函数 集合 Scala中集合分为可变集合和不可变集合 可变集合:可以修改.添加.移除一个集合的元素. 不可变集合:安全的并发访问. 不可变集合,相比之下,永远不 ...

  10. python基础教程pdf百度云-《Python基础教程(第3版)》PDF高清版

    <python基础教程第3版>PDF高清版  百度云资源,内涵教材源代码 百度云链接:百度云盘 提取码:7r7o 编辑推荐 久负盛名的Python入门经典,是非常优秀的基础教程,深入浅出, ...

最新文章

  1. mysql创建表为什么第二次,mysql当我加入同一个表两次聚合是错误的
  2. 每日一皮:不同的视角看待问题...
  3. javascript判断图片是否加载完成方法整理
  4. 详解GPU技术关键参数和应用场景
  5. 2021年中国少儿编程行业报告
  6. HTML高仿哔哩哔哩(B站)视频网站整站模板
  7. .NET 环境中使用RabbitMQ(转)
  8. javascript高级程序设计第四版(javascript高级程序设计第四版)
  9. win7硬盘安装工具_扔掉U盘和光驱,一键从硬盘安装操作系统,这个硬盘装机工具真爽...
  10. PHY之MDIO解析
  11. iPhone5s 换电池、修右上角翘起的悲催过程
  12. gsm在linux下工作原理,GSM模块详解 从工作原理到应用案例
  13. Wireshark用户使用手册系列完结篇
  14. 手机APP应注册这些类别的商标
  15. 12306 订票助手(火车票订票插件)
  16. 实验2 运算器的编程实现
  17. Linux 下的 FFmpeg 安装编译环境配置总结
  18. Struts2+Spring+Hibernate 三大框架的合并集成
  19. 【机器学习】评价指标PSI
  20. 给你的Potplayer设置老板键

热门文章

  1. centos7下使用yum安装mysql
  2. 逍遥法外第一季/全集How To Get Away With Murder迅雷下载
  3. ArrayList构造方法详解-给默认长度的方式
  4. Android基础_数据存储
  5. ABAP:参数输入屏幕SELECTION-SCREEN中的事件
  6. 新增达达设计的8个Skin
  7. 【学习笔记】HTTP通讯基础
  8. 【FI模块学习笔记】 固定资产概述(上)
  9. MIR6校验时移动平均价为负的原因及解决
  10. wsdl 与 soap协议详解