1、匿名函数的引入

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

2、匿名函数的格式

  1. 函数名 = lambda 参数 :返回值
  2.  
  3. 参数可以有多个,用逗号隔开
    匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
    返回值和正常的函数一样可以是任意数据类型
    我们可以看出,匿名函数并不是真的不能有名字。
  1. 匿名函数的调用和正常的调用也没有什么分别。 就是 函数名(参数) 就可以了~~~
  2. 3、特殊使用方式
  1. # 1) 返回语句是简单的三元运算
  2. num = [1,2,6,7,9]
  3. filter(lambda x:True if x%2 == 0 else False, num)
  4.  
  5. # 2) 返回的是一个列表推导式
  6. nums = [[1,2],[6,7],[9,10]]
  7. g = filter(lambda x:['ILOVEU%d'%i for i in x], nums)
  8. for i in g:
  9. for j in i:
  10. print(j) #--todo 未返回字符串!

4、有关面试题

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

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

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

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

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

  1. def multipliers():
  2. return [lambda x:i*x for i in range(4)]
  3. print([m(2) for m in multipliers()])
  4. # 请修改multipliers的定义来产生期望的结果。
  5. '''错误示范
  6. 答:输出的结果是一个生成器对象,因为最有打印的是一个生成器表达式,它的返回结果是一个生成器;
  7. 要想产生期望的结果,需要迭代它:
  8. for i in [m(2) for m in multipliers()]:
  9. print(i)
  10. 结果为:
  11. 0
  12. 2
  13. 4
  14. 6
  15. '''
  16. # for i in [m(2) for m in multipliers()]:
  17. # print(i)
  18. #todo 做错分析:生成器表达式是用‘()’包起来的!而此处是‘[]’,明显是列表推导式!---> 它是生成列表的
  19. # todo 这个生成的列表,[lambda x:i*x for i in range(4)]
  20. # todo:解析成普通表达式:此时没有执行(没有赋值,非赖加载),而i都取出来,最后的i = 3
  21. lis = []
  22. for i in range(4):
  23. lis.append(lambda x:i*x) # todo 赖加载,i没有被赋值
  24. print(lis) # [<function <lambda> at 0x000001A4FF45E400>, <function <lambda> at 0x000001A4FF45E840>, <function <lambda> at 0x000001A4FF45E6A8>, <function <lambda> at 0x000001A4FF45E730>]
  25. # 错误的理解:里面的元素是4个匿名函数:lambda x:0*x,lambda x:1*x,lambda x:2*x,lambda x:3*x
  26. # todo 接着打印这个列表:[m(2) for m in multipliers()]
  27. # todo:将这个列表推导式解析为普通列表:
  28. li = []
  29. for m in multipliers():
  30. li.append(m(2))
  31. print(li)#[6, 6, 6, 6]
  32.  
  33. # --todo 题目最后要产生期望的结果。即上面“错误的理解”,以为是生成器
  34. def multipliers_n():
  35. return (lambda x:i*x for i in range(4))
  36. 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. 正睿暑期培训day1考试

    链接 A 理解一下题意,然后玩几组样例就能发现,实际上就是\(k\)个\(i\)等价于\(1\)个\(i-1\).所以就类似于\(k\)进制进行进位,如果最后\(0\)位上不是\(0\),那么就存在划 ...

  2. 在net Core3.1上基于winform实现依赖注入实例

    目录 在net Core3.1上基于winform实现依赖注入实例 1.背景 2.依赖注入 2.1依赖注入是什么? 2.1依赖注入的目的 2.2依赖注入带来的好处 2.2.1生命周期的控制 2.2.2 ...

  3. Leetcode练习题Remove Element

    Leetcode练习题Remove Element Question: Given an array nums and a value val, remove all instances of tha ...

  4. tf.slice()

    原文连接:https://www.jianshu.com/p/71e6ef6c121b tf.slice()到底要怎么切呢?下面通过列子来看看 方程的signature是这样的: def slice( ...

  5. Java代理类Proxy的用法

    代理(proxy) 利用代理可以在运行时创建一个实现了一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. 何时使用代理 假设有一个表示接口的Class对象(有可能只包含一 ...

  6. 镭神激光雷达对于Autoware的适配

    1. 前言 我们的自动驾驶采用镭神激光雷达,在使用Autoware的时候,需要对镭神激光雷达的底层驱动,进行一些改变以适配Autoware. 2. 修改 (1)首先修改lslidar_c32.laun ...

  7. 云原生生态周报 Vol. 13 | Forrester 发布企业级容器平台报告

    业界要闻 近日,全球知名市场调研机构 Forrester 发布首个企业级公共云容器平台报告.其中,阿里云容器服务的市场表现全球前三.中国第一,同时创造中国企业最好成绩,进入强劲表现者象限.报告显示,阿 ...

  8. Python platform 模块

    Python platform 模块 platform 模块用于查看当前操作系统的信息,来采集系统版本位数计算机类型名称内核等一系列信息. 使用方法: import platform # 获取操作系统 ...

  9. Python 线程池(小节)

    Python 线程池(小节) from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import os,time, ...

  10. Spring Boot 使用 Log4j2 & Logback 输出日志到 EKL

    文章目录 1.ELK 介绍 2.环境.软件准备 3.ELK 环境搭建 4.Spring Boot 配置示例 4.1.Log4j2 方式配置 4.2.Logback 方式配置 1.ELK 介绍 ELK ...