1、匿名函数的引入

为了解决那些功能很简单的需求而设计的一句话函数
 def func(i):
return 2*i
# 简化之后
func = lambda i:2*i #todo 其中:func是函数名,lambda是匿名函数的关键字,i是传入的参数,2*i是返回值。
print(func(2))

2、匿名函数的格式

函数名 = lambda 参数 :返回值

参数可以有多个,用逗号隔开
匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
返回值和正常的函数一样可以是任意数据类型
我们可以看出,匿名函数并不是真的不能有名字。
匿名函数的调用和正常的调用也没有什么分别。 就是 函数名(参数) 就可以了~~~

3、特殊使用方式
 # 1) 返回语句是简单的三元运算
num = [1,2,6,7,9]
filter(lambda x:True if x%2 == 0 else False, num) # 2) 返回的是一个列表推导式
nums = [[1,2],[6,7],[9,10]]
g = filter(lambda x:['ILOVEU%d'%i for i in x], nums)
for i in g:
for j in i:
print(j) #--todo 未返回字符串!

4、有关面试题

1)下面程序输出的结果是?

 d = lambda p:p*2
t = lambda p:p*3
x = 2
x = d(x)
x = t(x)
x = d(x)
print(x)
# # todo:但是x的值是在变化的,
# # 从x=2 ---> x = d(x) = x*3 = 6 ---> x = t(x) = x*2 = 12 --> x = d(x) = x*2 = 24
# '''
# 答:4,(看最后一次的赋值:x = d(x) )

2)有两个元组(('a'),('b')),(('c'),('d')),请使用python中的匿名函数生成列表[{'a':'c'},{'b':'d'}] 出题很有水平

 t1 = (('a'),('b'))
t2 = (('c'),('d'))
# #法1
zi = lambda a, b: zip(a, b)
#it = zip(t1,t2)
res = {}
for i in zi(t1, t2):
res[i[0]] = i[1]
#
#法2 优化代码后 todo:考到匿名函数时,就要想到内置函数,
# todo 有5个内置函数(map,filter,sorted,min,max)是可以用到匿名函数的!
it = zip(t1,t2)
res = map(lambda tup:{tup[0]:tup[1]},it)
print(list(res))

3)以下代码的输出是什么?请给出答案并解释。

 def multipliers():
return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
# 请修改multipliers的定义来产生期望的结果。
'''错误示范
答:输出的结果是一个生成器对象,因为最有打印的是一个生成器表达式,它的返回结果是一个生成器;
要想产生期望的结果,需要迭代它:
for i in [m(2) for m in multipliers()]:
print(i)
结果为:
0
2
4
6
'''
# for i in [m(2) for m in multipliers()]:
# print(i)
#todo 做错分析:生成器表达式是用‘()’包起来的!而此处是‘[]’,明显是列表推导式!---> 它是生成列表的
# todo 这个生成的列表,[lambda x:i*x for i in range(4)]
# todo:解析成普通表达式:此时没有执行(没有赋值,非赖加载),而i都取出来,最后的i = 3
lis = []
for i in range(4):
lis.append(lambda x:i*x) # todo 赖加载,i没有被赋值
print(lis) # [<function <lambda> at 0x000001A4FF45E400>, <function <lambda> at 0x000001A4FF45E840>, <function <lambda> at 0x000001A4FF45E6A8>, <function <lambda> at 0x000001A4FF45E730>]
# 错误的理解:里面的元素是4个匿名函数:lambda x:0*x,lambda x:1*x,lambda x:2*x,lambda x:3*x
# todo 接着打印这个列表:[m(2) for m in multipliers()]
# todo:将这个列表推导式解析为普通列表:
li = []
for m in multipliers():
li.append(m(2))
print(li)#[6, 6, 6, 6] # --todo 题目最后要产生期望的结果。即上面“错误的理解”,以为是生成器
def multipliers_n():
return (lambda x:i*x for i in range(4))
print([m(2) for m in multipliers_n()]) # 这里每循环一次,就执行一次生成器去取值,这才是真正的赖加载

Python进阶-Ⅷ 匿名函数 lambda的更多相关文章

  1. python的匿名函数lambda解释及用法

    lambda函数的语法只包含一个语句,如下:    lambda arg1,arg2,.....argn:expression(主要是看下面的例子)代码示例: #-*- coding:utf-8 -* ...

  2. python中匿名函数lambda如何用

    python中经常用到的一个函数:匿名函数lambda ,什么是匿名函数?匿名函数的意义是什么?匿名函数怎么样用?(疑问三连,what,why,how) 一,什么是匿名函数? python中没有名字的 ...

  3. python的匿名函数 lambda的使用方法详解以及使用案例

    1.匿名函数是用lambda这个关键字定义 lambda  x:x+1   第一个x代表形参,x+1相当于函数的返回值 #lambda x:x+1 第一个x代表形参,x+1相当于函数的返回值 def ...

  4. python tips:匿名函数lambda

    lambda用于创建匿名函数,下面两种函数定义方式等价. f = lambda x: x + 2 def f(x): return x + 2 立刻执行的匿名函数 (lambda x: print(x ...

  5. Python:匿名函数lambda的函数用法和排序用法

    一.介绍: Lambda函数,是一个匿名函数,创建语法: lambda parameters:express parameters:可选,如果提供,通常是逗号分隔的变量表达式形式,即位置参数. exp ...

  6. python中匿名函数lambda

    简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命 名一个函数的场合下使用,也就是指匿名函数. 先看它的几个用法: map( lambda x: x*x, [y f ...

  7. python之匿名函数lambda

    # lambda:匿名函数 # 语法:lambda 参数: 表达式 answer = lambda x: x * 5 print("answer(5): ", answer(5)) ...

  8. python:匿名函数lambda

    看个例子: a=list(map(lambda x:x*x,(1,2,3))) print(a) 输出:[1, 4, 9] lambda实际上就是匿名函数,相当于: def f(x): return ...

  9. Python学习笔记010——匿名函数lambda

    1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...

随机推荐

  1. c++负数下标

    如何使用负数下标呢? 让数组前面有东西 int y[100]; int *z = y + 50; 这样的话调用\(z[-50]\)就变成了调用\(y[0]\) z[-50] = y[0]; 然后这样就 ...

  2. 【转】UML之类图和对象图

    思路呈现 什么是类图? 描述类.接口.协作及他们之间的关系的图.显示系统中类的静态结构. 有什么作用? 描述软件系统的静态结构 ①对系统的词汇建模 ②对简单协作建模 ③对逻辑数据库模式建模 什么是对象 ...

  3. OpenCV Error: Unknown error code -10 (Raw image encoder error: Empty JPEG image (DNL not supported)) in throwOnEror 错误

    出现上面这样的错误可以肯定是传了空指针导致的, 刚开始出现这样的问题, 并且是概率性的, 网上找了一遍都没找到解决方案, 然后自己一行一行代码注释, 发现还是会出现这样的问题, 当时就懵逼了, 我从打 ...

  4. jdk自带监控程序jvisualvm的使用

    监控小程序的配置 生产环境tomcat的配置 编辑应用所在的tomcat服务器下的bin目录下的catalina.sh文件,修改如下: 配置如下内容: export JAVA_OPTS="- ...

  5. ItelliJ Idea 2019提交TFVC变更,系统提示Validation must be performed before checking in

    问题描述 全新安装的Idea 2019,从Azure DevOps Server 2019 (原名TFS)的TFVC代码库下载文件,正常. 修改代码后,签入,系统提示"Validation ...

  6. 海边拾贝-F-第三方项目

    第三方网站,不定期更新: 陈浩个人博客: https://coolshell.cn/ 阮一峰个人博客:http://www.ruanyifeng.com/blog/2015/02/make.html ...

  7. 一个利用 Parallel.For 并行处理任务,带有进度条(ProgressBar)的 WinForm 实例(下)

    接着上一篇:一个利用 Parallel.For 并行处理任务,带有进度条(ProgressBar)的 WinForm 实例(上) 直接贴代码了: using System; using System. ...

  8. Window权限维持(一):注册表运行键

    在红队行动中在网络中获得最初的立足点是一项耗时的任务.因此,持久性是红队成功运作的关键,这将使团队能够专注于目标,而不会失去与指挥和控制服务器的通信.在Windows登录期间创建将执行任意负载的注册表 ...

  9. 基于OpenCV.Net投影法进行文本分块切割

    假设有如下一张图,如何把其中的文本分块切割出来,比如“华普超市朝阳门店”.“2015-07-26”就是两个文本块. 做图像切割有很多种方法,本文描述一种最直观的投影检测法.先来看看什么是投影,简单来说 ...

  10. linux安装和使用zookeeper

    一.安装条件 想要安装zookeeper,必须先在linux中安装好jdk.安装步骤见: https://www.cnblogs.com/expiator/p/9987351.html 二.下载并解压 ...