匿名函数

简介

匿名函数:为了解决那些功能很简单的需求而设计的一句话函数。

python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

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

匿名函数

#定义一个函数实现加法运算
def add(x,y):return x+y
print(add(1,2))
#匿名函数实现
a = lambda x,y:x+y# lamba 参数:返回值
print(a(1,2))

由上面可以看出,匿名函数是可以有函数名的。不过它也真的可以匿名,在和其他功能函数合作的时候。

求字典dic={'k1':10,'k2':100,'k3':30}中value最大的key。

实现:

dic={'k1':10,'k2':100,'k3':30}
def func(k):return dic[k]
print(max(dic,key=func))

转换成匿名函数:

dic={'k1':10,'k2':100,'k3':30}
print(max(dic,key=lambda k:dic[k]))

求列表l = [1,2,3,4,5,6]的平方。

实现:

l = [1,2,3,4,5,6]
def func(x):return x**2
f = map(func,l)
for i in f:print(i,end=' ')

匿名函数实现:

f1 = map(lambda x:x**2,[1,2,3,4,5,6])
for i in f1:print(i,end=' ')

筛选出列表中大于10的数字

实现:

l = [5,8,11,9,15]
def func(x):return x > 10
s = filter(func,l)
for i in s:print(i,end=' ')

匿名函数实现:

s1 = filter(lambda x:x > 10,[5,8,11,9,15])
for i in s1:print(i,end=' ')

面试题

一、

现有两个元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

实现:

t1 = (('a'),('b'))
t2 = (('c'),('d'))
r1 = zip(t1,t2)def func(t):return {t[0]:t[1]}r2 = map(func,r1)
print(list(r2))#要求生成列表

匿名函数实现:

r2 = map(lambda t:{t[0]:t[1]},zip((('a'),('b')),(('c'),('d'))))
print(list(r2))

提示:看到要求使用匿名函数实现的,就要立刻联想到能和匿名函数一起使用的功能函数。

min max filter map sorted <——> lambda

还能够这样写:

t1 = (('a'),('b'))
t2 = (('c'),('d'))
r = lambda t1,t2:[{i:j} for i,j in zip(t1,t2)]
print(r(t1,t2))
r1 = [{i:j} for i,j in zip(t1,t2)]
print(r1)

二、

1.下面程序的输出结果是:
d = lambda p:p*2
t = lambda p:p*3
x = 2
x = d(x)
x = t(x)
x = d(x)
print x

很容易看出来,不再赘述。

三、

3.以下代码的输出是什么?请给出答案并解释。
def multipliers():return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
请修改multipliers的定义来产生期望的结果。

输出结果:

解析:1、先定义一个函数 multipliers,未调用。

   2、在print语句里面调用函数 multipliers,得到的返回值是一个列表推导式

   3、在 i 分别等于0,1,2,3的时候,都生成一个 lamba x:i*x,即返回值是4个 lamba x:i*x

   4、四个 lamba x:i*x都是名为 m 的函数,此时调用m,即m(2)

   5、调用m函数的时候,x=2,i=3,因为在生成第四个lamba x:i*x的时候,i=3,最终赋值,前面i=0、1、2的时候函数m都未调用

   6、即输出[3*2,3*2,3*2,3*2,]——>[6,6,6,6]

如题又说修改函数multipliers的定义来产生期望的结果:

既是想要使i=0、1、2、3的时候分别调用函数m,使输出为[0,2,4,6]

实现:将列表推导式改成生成器表达式就行了。由于惰性,每次调用函数的时候,生成器才执行一次,取出一个值,一个一个取,即满足需求。

def multipliers():return (lambda x:i*x for i in range(4))
print([m(2) for m in multipliers()])

pass

转载于:https://www.cnblogs.com/smallfoot/p/10066756.html

python学习日记(匿名函数)相关推荐

  1. Python学习笔记:匿名函数

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  2. python学习交流 - 匿名函数

    匿名函数 匿名函数是一个很有特色的定义函数的功能.在实际使用的过程,用户有时不得不为一些一行代码即可实现的功能来定义一个函数,例如像map, max, filter等内置函数的key参数只能接收可调用 ...

  3. Python学习日记(八) 函数

    函数的结构: 函数的返回值: 1.当函数执行时运到return关键字将不再往下执行 def func():print("hello world!")print("hell ...

  4. Python学习日记-pandas操作学习

    Python学习日记-pandas模块学习 根据需求筛选数据 绘制柱状图-利用pandas绘制 绘制柱状图-利用matplotlib绘制 绘制柱状图-两组数据比较 绘制柱状图-叠加柱状图 绘制饼状图 ...

  5. 菜菜的Python学习日记 | 正则表达式你必须了解的知识点

    系列索引:菜菜的Python学习日记 | Python从入门到入土详解 文章目录 常用规则 Python对正则表达式的支持 常用规则 符号 解释 示例 说明 . 匹配任意字符 b.t 可以匹配bat ...

  6. Python学习笔记12_函数

    Python学习笔记12_函数 文章目录 Python学习笔记12_函数 1.函数定义 2.函数调用 3.函数的参数 3.1.可更改对象和不可更改对象参数 3.2.必需参数(位置参数) 3.3.关键字 ...

  7. [Python学习日记] 文件与文件系统(一)

    [Python学习日记] 文件与文件系统(一) 目录 Python3 File(文件) 方法 open() 方法 file 对象 目录 Python3 File(文件) 方法 open() 方法 Py ...

  8. Python入门篇-匿名函数

    Python入门篇-匿名函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.匿名函数概述 1>.什么是匿名函数 匿名,即没有名字 匿名函数,即没有名字的函数 2>. ...

  9. Python学习之zip函数

    Python 学习之 zip 函数 问题的引出 有时候,你可能想同时迭代两个序列.假设有下面两个列表: names = ['anne', 'beth', 'george', 'damon'] ages ...

最新文章

  1. 系统学习机器学习之决策树
  2. dorado 刷新_5.dorado查询开发:使用flushData方法 (T1)
  3. 万立快速开发平台——软件制作大师
  4. linux内核oops错误码说明,调试 – 了解内核oops错误代码
  5. 优秀代码所具备的5大品质 你的代码呢?
  6. 获取经纬度之间距离的Java工具类
  7. 用matlab实现灰色预测gm11模型,用MATLAB实现灰色预测GM11模型
  8. 河北省计算机科学专业高校排名,河北省计算机类专业大学排名
  9. 中文名字和英文名字正则匹配
  10. Jquery——将页面定位到某个具体位置
  11. 有时候,感慨的人生~
  12. pytorch用多层感知机实现鸢尾花3分类(亲测可用)
  13. 手机号归属地 libphonenumber
  14. JAVA自学之路 [原创 - 尚学堂科技 - 马士兵老师]
  15. 【Android】Google Android开发技术
  16. android权限设置在哪找,Android权限申请与打开权限设置页面
  17. 加密内存卡 TF 卡歌曲或资料拷贝出来的方法,完全可行
  18. 5G对定位技术的影响
  19. 一、UNIX发展过程
  20. 荐书 | 2021年1季度我读过的十本好书!

热门文章

  1. appium + python 搭建
  2. day10T1改错记
  3. Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1
  4. protected default
  5. 【01背包】洛谷P1282多米诺骨牌
  6. Pascal's Triangle II
  7. Scramble String -- LeetCode
  8. ITK读图VTK显示
  9. 1. ThreadPoolExecutor的一个常用的构造方法
  10. python 返回空格_Python面试之 is 和 == 的区别