python学习笔记1 -- 函数式编程之高阶函数 使用函数作为返回值
使用函数作为返回值,看起来就很高端有木有,前面了解过函数名本身就是一个变量,就比如abs()函数,abs只是变量名,而abs()才是函数调用,那么我们如果把ads这个变量作为返回值返回会怎么样呢,这就是返回函数了。
举个栗子:当我们需要计算一个序列的和,但是并不希望现在就显示,而是在我想要使用的时候显示那可以通过如下方式
- def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
这样当我们调用这个函数
- f = lazy_sum(3, 6)
的时候,你猜函数返回是啥,对,没错,返回 sum,注意是sum而不是 sum(),而当只有为sum()的时候,才是真正的函数调用,去计算结果,
那么神奇的事情就发生了,我们可以再任意位置通过
f()的方式去调用函数,并且返回 一个 9 的计算结果。
- 大佬(我)总结了,划重点:调用的函数叫外函数,返回的函数叫内函数,
返回函数后的变量指向内函数,因此,返回的函数其实是内函数这里说到内函数就要说到闭包,这里内函数用到了外函数的变量 *args,其实内函数可以一直用外函数的变量,那是为啥呢,就是因为闭包,普通函数在
声明周期结束后他的内存空间也就释放了,内容也就没了,但是返回函数的高阶函数就不一样了,他允许被内函数调用的变量在外函数结束后继续绑定给内函数,怎么说呢,就好像你朋友租了一间房子,然后房子里有
个微波炉很好用,本以为和睦相处,但是你朋友住了几天搬走了,你又舍不得那个
- 微波炉,你天天想用,那怎么办呢,房东答应你,虽然你朋友不住了,但是你可以继续使用这个微波炉,这就是闭包,大概就是这个意思,虽然外
函数嗝屁了,但是内函数要用外函数的东西,那这个东西就不能没了,会继续绑定到内函数继续使用,直到内函数也嗝屁了才结束- 练习过程中遇到另一个很坑的问题就是一个语法:
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
在上面的例子中,每次循环,都创建了一个新的函数,然后,把创建的3个函数都返回了。
你可能认为调用f1()
,f2()
和f3()
结果应该是1
,4
,9
,但实际结果是:
>>> f1()
9
>>> f2()
9
>>> f3()
9
廖老师这个例子,让我很不解为什么 f1()= 9 ,后来才知道
f1, f2, f3 = count() == f1 = count()[0],f1 = count()[1], f2 = count()[2]
这是一种高级赋值方式,而且仅当 左边元素个数等于右边的序列元素个数时可以这么赋值,学到了学到了,还真是骚操作啊
python学习笔记1 -- 函数式编程之高阶函数 使用函数作为返回值的更多相关文章
- python学习笔记1 -- 函数式编程之高阶函数 map 和reduce
我用我自己,就是高阶函数,直接表现就是函数可以作为另一个函数的参数,也可以作为返回值 首先一个知识点是 函数的表现形式,印象中的是def fw(参数)这种方式定义一个函数 python有很多的内置函 ...
- python学习笔记1 -- 函数式编程之高阶函数 filter
filter 函数用于过滤序列,与map 和reduce函数类似,作为高阶函数,他们也是同样的使用方法,filter(参数1, 参数2),参数1是一个函数,而参数2是一个序列. filter的作用是根 ...
- python学习笔记1 -- 函数式编程之高阶函数 sorted排序
python提供了很强大的内置排序函数,妈妈再也不担心我不会写冒泡排序了呀,sorted函数就是这个排序函数,该函数参数准确的说有四个,sorted(参数1,参数2,参数3,参数4). 参数1 是需要 ...
- Python基础笔记:函数式编程:高阶函数、返回函数、匿名函数
高阶函数 高阶函数:一个函数可以接收另一个函数作为参数 或 一个函数可以返回一个函数作为返回值,这种函数称之为高阶函数. #函数 add 接收 f 函数作为参数 >>> def ad ...
- Python学习笔记之函数式编程
python中的高阶函数 高阶函数就是 变量名指向函数,下面代码中的变量abs其实是一个函数,返回数字的绝对值,如abs(-10) 返回 10 def add(x,y,f): return f(x) ...
- Python学习笔记6 函数式编程_20170619
廖雪峰python3学习笔记: # 高阶函数 将函数作为参数传入,这样的函数就是高阶函数(有点像C++的函数指针) def add(x, y): return x+y def mins(x, y): ...
- python学习笔记011——函数式编程
1 函数式编程 面向对象 ,面向过程 ,函数式编程 侧重函数的作用,注重函数结果的传递 函数可以被赋值,也可以接受其他的值 2 函数式编程特点 1.函数是一等公民 与其他变量一样,可以赋值和被赋值,可 ...
- python学习笔记(六) 函数式编程
一 函数对象 函数同样可以作为对象复制给一个变量,如下: f = abs; print(f(-10)) f = 'abs'; print(f) def add(a,b,f): return f(a) ...
- 小白的Python之路 day3 函数式编程,高阶函数
函数式编程介绍 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的 ...
随机推荐
- scheduler的调度规则
对爬虫的请求进行调度管理 允许接收requests并且会调度一个request去下载,且具有去重机制 优先级和队列不会被调度器执行(调度器不管优先级的问题),用户使用字段给每个Request对象,可以 ...
- 浅谈MySQL数据库
目录 什么是数据库 定义 发展现状 数据库基本概念 数据库分类 关系数据库 非关系型数据库(NoSQL) 数据库启动与连接 启动服务端 连接数据库 用户信息查看 数据库的基本操作 表的基本操作 记录的 ...
- 洛谷 P3916 【图的遍历】
这道题绿题有点高了吧... 我一开始的思路就是一个暴力的遍历,用递归加一个记忆化,对于一个点不断的往下搜索,然后确定最大的,返回,给上面的节点.就在这个过程中,我们是搜到最大的数然后返回给上层的数,那 ...
- Oracle Solaris 10下gdb安装(附安装包)
文章目录 1. 背景说明 2. gdb相关包 3. gdb安装 3.1 上传资源 3.2 解压 3.3 安装 3.4 环境变量 4. 位数确认 5. 验证可用性 1. 背景说明 本文承接Oracle ...
- CSS3样式_实现字体发光效果
text-shadow 属性仅仅是用来设置文本阴影的,似乎并不能实现字体发光效果.其实不然,这正是 text-shadow 属性的精妙之处.当阴影的水平偏移量和垂直偏移量都为0时,阴影就和文本重合了. ...
- html通过css,js实现div悬浮效果总汇,如原生JS实现滚动到一定位置实现div悬浮
在我们的实际开发中,经常会遇到页面中需要悬浮效果,比如最早的客服联系,对联悬浮广告等,今天为大家介绍一些如何实现div悬浮的效果. 传统的fixed实现: 通过css中的属性position参数设为f ...
- Python——assert、isinstance的用法
1.assert 函数说明: assert语句是一种插入调试断点到程序的一种便捷的方式. 使用范例 assert 3 == 3 assert 1 == True assert (4 == 4) pri ...
- buu[护网杯 2018]easy_tornado
[护网杯 2018]easy_tornado 1.看看题目给了我们三个文件: /flag.txt url=?filename=/flag.txt&filehash=98c6aac4fbecf1 ...
- DVWA学习记录 PartⅧ
Weak Session IDs 1. 题目 用户访问服务器的时候,为了区别多个用户,服务器都会给每一个用户分配一个 session id .用户拿到 session id 后就会保存到 cookie ...
- python并发编程02 /多进程、进程的创建、进程PID、join方法、进程对象属性、守护进程
python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 目录 python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 ...