文章目录

  • 高阶函数
    • 函数传参
    • 返回函数(闭包)
    • 匿名函数lambda

高阶函数

定义:
至少满足下列一个条件:

  • 接受一个或多个函数作为输入
  • 输出一个函数

python里的高阶函数有 filter、map、reduce、sorted、匿名函数lambda等

函数传参

顾名思义就是把一个函数作为参数传到另一个函数中,也不复杂,直接上代码:

def test1(x, func):return func(x)print(test1([1, 2, 3, 4, 5], sum))

这是一个很简单的示例,sum函数作为参数传入test1函数。

返回函数(闭包)

在函数中定义了另一个函数,并且把定义的函数作为返回值返回出去,在外部调用。


def mySum(*args):def sum():sum1 = 0for i in args:sum1 = sum1 + ireturn sum1return sumfunc1 = mySum(1, 2, 3, 4, 5)
print(func1)
print(func1())

从代码中能够看出,如果直接调用func1,打印的是函数的地址。
所以需要像调用函数一样去执行 :func1(),才能打印结果。

匿名函数lambda

python使用lambda来创建匿名函数

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。
  • 只能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

lambda [arg1 [,arg2,…argn]]:expression
lambda 参数列表:return [表达式] 变量
由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收

划重点:
在Python3里,map返回的结果是迭代器(iterator),因此需要先转换为列表list,再print输出。

rst = map(lambda x: x ** x, [y for y in range(5)])
print(rst, type(rst))
print(list(rst))
squares = list(map(lambda x: x**2, range(10)))
print(squares)


释疑
有些文章里面说lambda能够提高运行效率,一篇博文里面对此进行了验证

我没有进行试验,不过从结果看出来,其实效率没什么差别。
还有其他用法:
比如把lambda赋值给一个变量,然后像函数一样调用。


rst2 = lambda x, y, z: x * y * zprint()
print(rst2(2, 3, 4))tup = [(1, "a"), (8, "r"), (3, "e"), (4, "b")]print()
print(sorted(tup, key=lambda x: x[0]))
print()
print(sorted(tup, key=lambda x: x[1]))
print()

对元组进行排序,lambda结合sorted函数
运行结果:

还有一些其他使用:


# 在tkinter中定义内联的callback函数
import sys
from tkinter import Button, mainloop# 这里可以弹出一个窗口,点击按钮,打印Hello,World!
callBck = Button(text='Press', command=(lambda: sys.stdout.write('Hello,World!\n')))
callBck.pack()
callBck.mainloop()

另一段代码:


str2 = ['123', '213', '2443425', '12324235', '123123', '234234', '434234']
strBegin = filter(lambda x: x.startswith('1'), str2)
print(strBegin, type(strBegin))
print(list(strBegin))

运行结果:

打印结果时,因为结果需要转换类型才能打印出来,所以,使用的是:print(list(strBegin))

python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)相关推荐

  1. python简短语法_写出优雅简洁的 python 语法(二)函数传参

    Python中函数传递参数的形式包含多种,可根据情况而定使用哪种方式.基本所有语言都有简介明了的语法去替代繁琐的代码,优雅的写法不仅能提升代码美观,更能提高提高开发效率,让代码更加易读. 位置传递,默 ...

  2. python匿名函数可以赋值给变量_python3的匿名函数 | 吴老二

    匿名函数也是函数的一种,不过匿名函数和其他函数不一样,匿名函数只能是一种表达式,不能有return,返回值就是表达式的结果.匿名函数的关键词就是lambda,可以结合其他的函数一起使用,匿名函数的好处 ...

  3. python list大小_4个python常用高阶函数的使用方法

    1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举 ...

  4. Python之高阶函数(abs、map、reduce、filter、lambda匿名函数)

    Python之高阶函数(abs.map.reduce.filter.lambda匿名函数) 什么是内置高阶函数 高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返 ...

  5. python四大高阶函数_四大高阶函数

    目录 1. 匿名函数 在我们需要一个函数但又不想费神的去命名一个函数的场合下使用,这就是匿名函数 1 f = lambda x,y,z:x+y+z2 defF(x,y,z):3 return x+y+ ...

  6. x64汇编第三讲,64位调用约定与函数传参.

    目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...

  7. C++函数传参int a,int *a,int a,const int a的区别

    C++函数传参int a,int &a,const int &a的区别 # 传参方式                  作用 int a 值传递 无法改变a的值 int *a 地址传递 ...

  8. 机器学习深度学习高阶内容系列-kaggle广告点击欺诈识别实战

    机器学习深度学习高阶内容系列-kaggle广告点击欺诈识别实战 中国是全球最大的智能移动设备市场,每月有超过10亿台智能移动设备投入使用 .TalkingData是中国最大的独立大数据服务平台,覆盖全 ...

  9. 字符串的一系列方法以及函数传参

    字符串 存储: 计算机只能够存储二进制 所以存储字符串时 也需要转为二进制 所以就需要有一个对照表 方便将字符和二进制进行转换 这样的内容叫做编码方式 常见的有 ascii unicode 等 定义字 ...

最新文章

  1. ascii码对照表十六进制_ASCII
  2. Hyperledger Fabric 管道(1) 基本概念
  3. 【项目实践】【01】发货管理系统 SPS (2007年12月23日更新)
  4. maven引入springframework的猫腻
  5. Flowable 数据库表结构 ACT_HI_ACTINST
  6. MySQL笔记-解决Can't connect to local MySQL server through socket '/xx/xx/mysql.sock' (111)及(2)
  7. 【QR Code Generator】开源免费响应式QRcdr二维码生成网站源码
  8. code的bootstrap如何有提示 vs_如何用DataFocus对Excel表中数据进行分析?
  9. Android界面布局基本属性
  10. 电路设计——教你如何阅读数据手册
  11. java实现冒泡算法
  12. pdf怎么删除其中一页 删除pdf页面的方法
  13. 快速入门Sass:Sass中的体系结构
  14. 程序员快收藏:国内一二线城市的互联网公司汇总
  15. 电子烟能破壳类四大天王“和大天壹”新物种么?
  16. snort实验(一)
  17. java 通用权限管理_通用权限管理设计篇(一)
  18. 【OpenCV+Qt】实现简易视频播放器——支持进度条拖动
  19. 机器人中的数值优化之最速下降法
  20. 科技拾遗|成为传奇的哈勃望远镜,曾经居然被当做笑话?

热门文章

  1. Angular 应用里的 vendor.js 是用来干什么的?
  2. SAP Commerce的Runtime Attributes
  3. Jasmine里的describe,it和expect函数
  4. SAP CRM, C4C和Hybris Commerce的数据迁移策略
  5. 使用wxpy这个基于python实现的微信工具库的一些常见问题
  6. price change SAT trace
  7. 用Axure开发的一个智能驾驶的app原型
  8. Apache httpclient的execute方法调试
  9. 打印出系统所有即未被assign到business transaction和IBASE component的product ID列表
  10. Object component的各种标识符