高阶函数| 学习笔记

简介: 快速学习高阶函数

开发者学堂课程Python入门 2020年版高阶函数】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10344


高阶函数

内容介绍

一、一个函数作为另一个函数的参数

二、一个函数作为另一个函数的返回值

三、函数套函数


一、一个函数作为另一个函数的参数

一个函数作为另一个函数的参数之前已经说过,lambda表达式里基本上都是把一个函数作为另一个函数的参数。

 

二、一个函数作为另一个函数的返回值

1

def foo():

print('我是foo,我被调用了’)

return 'foo'

def bar():

print('我是bar,我被调用了')

return foo()

如果现在运行的话,什么都不会打印,因为这个函数没有任何的调用,最后一行的foo 虽然被调用了,但是 bar 从来没有调用过,如果调barbar(),打印的结果肯定是‘我是 bar 我被调用了’,然后会打印‘我是 foo,我被调用了’。

2x=bar()它的返回值是调 foofoo 返回的结果是 foo,如果打印一下x

x = bar()

print('x的值是()'.format(x))

运行 x 的值是 foo,因为这个 x 是调 bar 的结果,bar 的结果是调的 foofoo 的结果是 foo,所以打印的结果是 foo

3、现在把最后一行foo后面的括号去掉

def foo():

print('我是foo,我被调用了’)

return 'foo'

def bar():

print('我是bar,我被调用了')

return foo

x = bar()

print('x的值是()'.format(x))

如果运行,print('我是bar,我被调用了')会被打印,print('我是foo,我被调用了’)是不会打印的,因为这个foo函数从来没有被调用过,x = bar()返回的结果是foofoo 后面没有加括号,其实用的就是这个函数, x其实是指向了 foo,是 foo函数的别名,如果想要调用foo函数可以写个x()

print(‘---------’)

x()

这个时候foo才会被调用现在这个结果是foo这个函数变成了bar这个函数的返回值,一个函数作为另一个函数的返回值,这也是一种形式。

4、如果要调也可以这样写:bar()()bar拿到的结果是 foo,然后再调一下foo,这个打印出来会是‘我是 bar,我被调用了’,然后‘我是 foo,我被调用了’。

5 y= bar()()

printy

最后y的结果就是foo,就是先调用 bar,拿到 bar 的结果,它是一个函数,然后再加个括号再调用这个函数,所以先会调 bar 函数打印‘我是 bar,我被调用了’,然后再调用 foo,告诉‘我是 foo,我被调用了’,最后拿到 foo 的执行结果给到yy的结果就是 foo

 

三、函数套函数

1、这个是更高级的,有些难理解。

def outer():

m = 100

def inner():

n = 90

print( 我是inner函数‘)

print('我是outer函数’) 

有一个外部函数,函数内部又定义了函数,这个叫函数套函数。

在外面可以调 outer 函数,调完之后,只会执行‘我是 outer 函数’,

print( 我是inner函数‘)这一段函数它是不会调用的,inner 函数是定义在 outer 函数里的,在外面是访问不到的,因为在 outer 里定义的变量是一个局部变量,没有局部函数的概念,但是它是一个内部函数,内部函数也只有在 outer 函数内部才能够使用,除了这个范围,在外面是不能够使用, 一般情况下会 return inner,把它给反馈回去,再来运行 outer

def outer():

m = 100

def inner():

n = 90

print( 我是inner函数‘)

print('我是outer函数’)

return inner

outer()()

outer 拿到 outer 的执行结果,outer 把自己内部的 inner 函数给返回去,这个时候再运行时可以的。

2、这个是函数套函数,然后再在这个函数里再返回一个这个函数,这就是它的一个结构,这是挺复杂的一个结构,先了解一下下节课会再讲,这里涉及到一个概念叫闭包,是跟装饰器有关系的,装饰器这个语法只做介绍不会详细讲。

相关文章
|
9月前
|
存储 算法
什么是高阶函数
什么是高阶函数
169 1
|
JavaScript 前端开发 Java
函数式编程入门:理解纯函数、高阶函数与柯里化
函数式编程入门:理解纯函数、高阶函数与柯里化
213 0
1 # 高阶函数
1 # 高阶函数
71 0
|
Java Kotlin
Kotlin中匿名函数(又称为Lambda,或者闭包)和高阶函数的详解
Kotlin中匿名函数(又称为Lambda,或者闭包)和高阶函数的详解
166 0
|
存储 缓存 算法
【Python高级编程】—— 函数式编程总结(生成器、迭代器、匿名函数、高阶函数、返回函数、闭包、装饰器、偏函数)
Python函数式编程的一般概念及特点, 迭代器、生成器表达式、内置函数、常用高阶函数、递归与归约、实用模块和装饰器的用法, 以及避开Python严格求值顺序的变通方法、Web服务设计方法和一些优化技巧。
330 1
【Python高级编程】—— 函数式编程总结(生成器、迭代器、匿名函数、高阶函数、返回函数、闭包、装饰器、偏函数)
|
分布式计算 开发者 Python
高阶函数| 学习笔记
快速学习高阶函数
|
PHP 开发者
简单匿名函数|学习笔记
快速学习简单匿名函数
简单匿名函数|学习笔记
|
存储 开发者 Python
匿名函数的使用介绍 | 学习笔记
快速学习 匿名函数的使用介绍
164 0
匿名函数的使用介绍 | 学习笔记
高阶函数实战
高阶函数实战
90 0
|
Python
Python编程:内置高阶函数
Python编程:内置高阶函数
125 0
Python编程:内置高阶函数