python 之匿名函数(lambda)
什么是匿名函数?匿名函数就是不用def关键字,使用lambda关键字定义的一个函数。匿名函数简约而不简单。
匿名函数的格式:
lambda[ paramters1, paramters2 , ...... ]: expression
1.lambda是一个表达式,而不是一个语句
2.lambda 的主体是只有一行的简单表达式,并不能扩展成一个多行的代码块
匿名函数和常规函数一样,参数都是根据需要可填可不填,返回的都是一个函数对象(function object),它们的用法也极其相似。
下面分别用lambda 、def 定义一个带有参数和无参数的函数
sum = lambda x, y: x + y print(sum(1, 0))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
1
等价于
def sum(x, y):
return x +y
print(sum(1, 0))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
1
result = lambda: False
print(result)
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
<function result at 0x031C08A0>
等价于
def result():
return False print(result)
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
<function result at 0x031C08A0>
lambda能够出现在一些def不能出现的地方,如列表常量中
list1 = [(lambda x: x)(x) for x in range(5)] print(list1)
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
[0, 1, 2, 3, 4]
lambda可以作为某些函数的参数
import os def read_file(path, name):
filename = path(name)
with open(filename, encoding='utf-8') as f:
datas = f.readlines()
print(datas) print(read_file(path=(lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))), name="set_1.py"))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
['# # 集合中不能含list、dict\n', '# set2 = {"rice", 1, (True, False)}\n', '# # 通过set()函数传入可迭代对象创建集合\n', '# set3 = set(range(10))\n', '# set4 = set(list(range(10)))\n', '# set5 = set(tuple(range(10)))\n', '# set6 = set("hello")\n', '# print(set2)\n', '# print(set3)\n', '# print(set4)\n', '# print(set5)\n', '# print(set6)\n', '\n', '# set1 = {2, 3, 4, 6, 5, 10}\n', '# set2 = {1, 3, 4, 9, 10}\n', '# # 集合的交集, 取共有的元素\n', '# result1 = set1 & set2\n', '# # 集合的差集,取集合2中不存在的元素\n', '# result2 = set1 - set2\n', '# # 集合的并集,取集合1、2所有元素\n', '# result3 = set1 | set2\n', '# # 集合的对称差,取集合1、集合2中不相同的元素\n', '# result4 = set1 ^ set2\n', '# print(result1)\n', '# print(result2)\n', '# print(result3)\n', '# print(result4)\n', '\n', 'list1 = [2, 2, 4, 5, 6, 6, 9, 0, 9]\n', '# 利用集合去重\n', 'set1 = set(list1)\n', '# 再将集合转成列表\n', 'list1 = list(set1)\n', 'print(list1)']
None
lamada 和def定义的函数一样,也可以嵌套
result = (lambda x: (lambda y: x+y)) # 这就是一个用lambda实现的闭包,与普通闭包一样,内嵌lambda表达式可以获得上层lambda函数的变量
z = result(3)
print(result(3))
print(z(3))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
<function <lambda>.<locals>.<lambda> at 0x03C3A780>
6
匿名函数的应用
filter函数
# filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表,该函数接收两个参数
# 其中第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
data = filter(lambda x: x < 5, [3, 6, 7, 9, 0])
print(list(data))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
[3, 0]
map函数
# map()会根据提供的函数对指定序列做映射
# 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
data = map(lambda x: x < 5, [3, 6, 7, 9, 0])
print(list(data))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
[True, False, False, False, True]
reduce函数
# reduce() 函数会对参数序列中元素进行累积。
# reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果
from functools import reduce
data = reduce(lambda x, y: x + y, [3, 6, 7, 9, 0])
print(data)
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py
25
python 之匿名函数(lambda)的更多相关文章
- python的匿名函数lambda解释及用法
lambda函数的语法只包含一个语句,如下: lambda arg1,arg2,.....argn:expression(主要是看下面的例子)代码示例: #-*- coding:utf-8 -* ...
- python中匿名函数lambda如何用
python中经常用到的一个函数:匿名函数lambda ,什么是匿名函数?匿名函数的意义是什么?匿名函数怎么样用?(疑问三连,what,why,how) 一,什么是匿名函数? python中没有名字的 ...
- python的匿名函数 lambda的使用方法详解以及使用案例
1.匿名函数是用lambda这个关键字定义 lambda x:x+1 第一个x代表形参,x+1相当于函数的返回值 #lambda x:x+1 第一个x代表形参,x+1相当于函数的返回值 def ...
- python tips:匿名函数lambda
lambda用于创建匿名函数,下面两种函数定义方式等价. f = lambda x: x + 2 def f(x): return x + 2 立刻执行的匿名函数 (lambda x: print(x ...
- Python进阶-Ⅷ 匿名函数 lambda
1.匿名函数的引入 为了解决那些功能很简单的需求而设计的一句话函数 def func(i): return 2*i # 简化之后 func = lambda i:2*i #todo 其中:func是函 ...
- Python:匿名函数lambda的函数用法和排序用法
一.介绍: Lambda函数,是一个匿名函数,创建语法: lambda parameters:express parameters:可选,如果提供,通常是逗号分隔的变量表达式形式,即位置参数. exp ...
- python中匿名函数lambda
简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命 名一个函数的场合下使用,也就是指匿名函数. 先看它的几个用法: map( lambda x: x*x, [y f ...
- python之匿名函数lambda
# lambda:匿名函数 # 语法:lambda 参数: 表达式 answer = lambda x: x * 5 print("answer(5): ", answer(5)) ...
- python:匿名函数lambda
看个例子: a=list(map(lambda x:x*x,(1,2,3))) print(a) 输出:[1, 4, 9] lambda实际上就是匿名函数,相当于: def f(x): return ...
- Python学习笔记010——匿名函数lambda
1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...
随机推荐
- java设计模式之七大原则
java设计模式 以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16724932.html 设计模式 1.设计模式的目的 ...
- POJ3041 小行星 (二分图匹配模板)
学了这么久连模板都没有写过,我来补个坑...... 将行看成集合X,列看成Y,障碍看成是X到Y的一条边. 消除次数最少,等价于最小点覆盖问题,最小点覆盖=最大匹配数,跑一遍匈牙利就行了 #includ ...
- flinksql读写redis
0.前言 最近有个需求,需要使用flinksql读写redis,由于官网上并没有redis的connector,在网上找了很久,开源的几个connector又没法满足要求,所有这里就自己动手实现了一个 ...
- Linux-->磁盘分区,挂载
Linux分区 原理介绍 Linux无论有几个分区,分给哪一个目录使用,他归根结底都只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分. Linux采用了一 ...
- Invalid bound statement (not found): com.zheng.mapper.UserMapper.login
错误的原因:mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到. mapper接口开发规范 1.Mapper.xm ...
- 复杂场景数据处理的 OLTP 与 OLAP 融合实践
本文首发于 NebulaGraph 公众号 Dag Controller 介绍 Dag Controller 是 NebulaGraph 企业版的系统,经过反复测试无误后进行了发布,它主要解决的是 O ...
- Codeforces Round #829 (Div. 2) A-E
比赛链接 A 题解 知识点:枚举. 只要一个Q后面有一个A对应即可,从后往前遍历,记录A的数量,遇到Q则数量减一,如果某次Q计数为0则NO. 时间复杂度 \(O(n)\) 空间复杂度 \(O(1)\) ...
- Blog1:nchu-software-oop-2022-1~3
(1) 前言 针对在完成三次作业过程中产生的问题进行总结与分析. 三次作业一共十五(9+3+3)道题目,其中前两次难度较为简单,第三次复杂程度飞跃式上涨. 其中,涉及到java语言中基本的输入输出语句 ...
- Java多线程-线程生命周期(一)
如果要问我Java当中最难的部分是什么?最有意思的部分是什么?最多人讨论的部分是什么?那我会毫不犹豫地说:多线程. Java多线程说它难,也不难,就是有点绕:说它简单,也不简单,需要理解的概念很多,尤 ...
- Codeforces Round #832 (Div. 2) A-D
比赛链接 A 题解 知识点:贪心. 我们考虑把正数和负数分开放,显然把负数和正数放在一起的结果不会更优. 时间复杂度 \(O(n)\) 空间复杂度 \(O(1)\) 代码 #include <b ...