python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)
文章目录
- 高阶函数
- 函数传参
- 返回函数(闭包)
- 匿名函数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)相关推荐
- python简短语法_写出优雅简洁的 python 语法(二)函数传参
Python中函数传递参数的形式包含多种,可根据情况而定使用哪种方式.基本所有语言都有简介明了的语法去替代繁琐的代码,优雅的写法不仅能提升代码美观,更能提高提高开发效率,让代码更加易读. 位置传递,默 ...
- python匿名函数可以赋值给变量_python3的匿名函数 | 吴老二
匿名函数也是函数的一种,不过匿名函数和其他函数不一样,匿名函数只能是一种表达式,不能有return,返回值就是表达式的结果.匿名函数的关键词就是lambda,可以结合其他的函数一起使用,匿名函数的好处 ...
- python list大小_4个python常用高阶函数的使用方法
1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举 ...
- Python之高阶函数(abs、map、reduce、filter、lambda匿名函数)
Python之高阶函数(abs.map.reduce.filter.lambda匿名函数) 什么是内置高阶函数 高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返 ...
- python四大高阶函数_四大高阶函数
目录 1. 匿名函数 在我们需要一个函数但又不想费神的去命名一个函数的场合下使用,这就是匿名函数 1 f = lambda x,y,z:x+y+z2 defF(x,y,z):3 return x+y+ ...
- x64汇编第三讲,64位调用约定与函数传参.
目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...
- C++函数传参int a,int *a,int a,const int a的区别
C++函数传参int a,int &a,const int &a的区别 # 传参方式 作用 int a 值传递 无法改变a的值 int *a 地址传递 ...
- 机器学习深度学习高阶内容系列-kaggle广告点击欺诈识别实战
机器学习深度学习高阶内容系列-kaggle广告点击欺诈识别实战 中国是全球最大的智能移动设备市场,每月有超过10亿台智能移动设备投入使用 .TalkingData是中国最大的独立大数据服务平台,覆盖全 ...
- 字符串的一系列方法以及函数传参
字符串 存储: 计算机只能够存储二进制 所以存储字符串时 也需要转为二进制 所以就需要有一个对照表 方便将字符和二进制进行转换 这样的内容叫做编码方式 常见的有 ascii unicode 等 定义字 ...
最新文章
- ascii码对照表十六进制_ASCII
- Hyperledger Fabric 管道(1) 基本概念
- 【项目实践】【01】发货管理系统 SPS (2007年12月23日更新)
- maven引入springframework的猫腻
- Flowable 数据库表结构 ACT_HI_ACTINST
- MySQL笔记-解决Can't connect to local MySQL server through socket '/xx/xx/mysql.sock' (111)及(2)
- 【QR Code Generator】开源免费响应式QRcdr二维码生成网站源码
- code的bootstrap如何有提示 vs_如何用DataFocus对Excel表中数据进行分析?
- Android界面布局基本属性
- 电路设计——教你如何阅读数据手册
- java实现冒泡算法
- pdf怎么删除其中一页 删除pdf页面的方法
- 快速入门Sass:Sass中的体系结构
- 程序员快收藏:国内一二线城市的互联网公司汇总
- 电子烟能破壳类四大天王“和大天壹”新物种么?
- snort实验(一)
- java 通用权限管理_通用权限管理设计篇(一)
- 【OpenCV+Qt】实现简易视频播放器——支持进度条拖动
- 机器人中的数值优化之最速下降法
- 科技拾遗|成为传奇的哈勃望远镜,曾经居然被当做笑话?
热门文章
- Angular 应用里的 vendor.js 是用来干什么的?
- SAP Commerce的Runtime Attributes
- Jasmine里的describe,it和expect函数
- SAP CRM, C4C和Hybris Commerce的数据迁移策略
- 使用wxpy这个基于python实现的微信工具库的一些常见问题
- price change SAT trace
- 用Axure开发的一个智能驾驶的app原型
- Apache httpclient的execute方法调试
- 打印出系统所有即未被assign到business transaction和IBASE component的product ID列表
- Object component的各种标识符