首页 > 其他分享 >匿名函数(lambda表达式)01

匿名函数(lambda表达式)01

时间:2023-07-09 10:34:05浏览次数:34  
标签:01 函数 age 匿名 print lambda name

匿名函数

顾名思义就是没有名字的函数。

匿名函数是一种没有函数名的函数,也称为"lambda函数"。

它是一种简洁的函数定义方式,可以在需要函数对象的任何地方使用,并且通常用于简化代码或作为其他函数的参数。

语法

1 lambda arguments: expression

其中,arguments是函数的参数列表,而expression是函数体中的单个表达式,该表达式的结果将作为函数的返回值。

1 add = lambda x, y: x + y  # python一切皆对象,add是此匿名函数的引用,可以当函数名使用
2 result = add(2, 3)  # 调用lambda函数,返回结果: 5 

定义了一个lambda函数,接受两个参数x和y,并返回它们的和。然后,我们调用lambda函数并传递参数2和3,得到结果5

示例

  1 '''
  2 匿名函数最佳实践:
  3     1. 简短、清晰的表达式: 匿名函数应尽量保持简短和清晰,只包含必要的表达式。复杂的逻辑或多行代码更适合使用常规函数。
  4     2. 仅限于简单操作: 匿名函数适合于执行简单的操作,如数学运算、过滤、映射等。对于复杂的任务,建议使用常规函数来提高可读性和维护性。
  5     3. 作为其他函数的参数: 匿名函数通常作为其他函数的参数传递,例如在map()、filter()和reduce()等函数中使用。
  6 
  7 匿名函数的注意事项:
  8     1. 无法包含多个表达式: 匿名函数只能包含单个表达式,无法包含多个语句或复杂的控制流程。
  9     2. 没有函数名称: 匿名函数是没有显示的函数名称,因此无法像常规函数那样被引用或调用。
 10     3. 可读性和可维护性: 尽管匿名函数可以简化代码,但过度使用匿名函数可能会降低代码的可读性和可维护性。请在适当的时候使用匿名函数。
 11     4. 局部变量的限制: 匿名函数的主体只能包含表达式,而不能包含赋值语句。如果需要在匿名函数中使用局部变量,请考虑使用默认参数或闭包。
 12 '''
 13 
 14 '''
 15 1. 体验lambda与普通函数
 16 需求:函数 返回值100
 17 '''
 18 
 19 
 20 # 1.1 函数
 21 def fn1():
 22     return 100
 23 
 24 
 25 result = fn1()  # 调用函数,并返回执行结果
 26 print(result)  # 100
 27 
 28 # 1.2 lambda  匿名函数
 29 fn2 = lambda: 100  # lambda 参数列表: 表达式,此处是只有表达式即100,fn2是匿名函数的引用,调用时需要添加()即fn2()
 30 print(fn2)  # lambda内存地址 <function <lambda> at 0x00000252EFC704A0>
 31 
 32 # 100返回值 调用函数
 33 print(fn2())  # 100
 34 
 35 '''
 36 2. lambda加法计算
 37 需求:计算任意两个数字的累加和
 38 '''
 39 
 40 
 41 # 1. 函数
 42 def add(a, b):
 43     return a + b
 44 
 45 
 46 result = add(1, 2)
 47 print(result)
 48 
 49 # 2. lambda
 50 fn1 = lambda a, b: a + b  # 参数是a,b,表达式 a + b,其实隐藏了return 表达式即return a + b
 51 print(fn1(2, 3))  # 5
 52 
 53 '''
 54 3. 函数参数:
 55     1. 无参
 56     2. 1个参数
 57     3. 默认参数
 58     4. 可变参数:可变参数位置参数
 59     5. 可变参数:可变参数关键字参数
 60 '''
 61 # 1. 无参数
 62 fn1 = lambda: 100
 63 print(fn1())  # 100
 64 
 65 # 2. 一个参数
 66 fn2 = lambda a: a
 67 print(fn2('hello world'))  # hello world
 68 
 69 # 3. 默认参数/缺省参数
 70 fn3 = lambda a, b, c=100: a + b + c
 71 print(fn3(10, 20))  # 130
 72 print(fn3(10, 20, 200))  # 230
 73 
 74 # 4. 可变参数:不定长位置参数 *args
 75 fn4 = lambda *args: args
 76 print(fn4(10, 20))  # (10, 20)
 77 print(fn4(10, 20, 30, 40))  # (10, 20, 30, 40)
 78 print(fn4(10))  # (10,)
 79 
 80 # 5. 可变参数:不定长关键字参数 **kwargs
 81 fn5 = lambda **kwargs: kwargs
 82 print(fn5(name='Python'))  # {'name': 'Python'}
 83 print(fn5(name='Python', age=30))  # {'name': 'Python', 'age': 30}
 84 
 85 '''
 86 4. 带判断的lambdba
 87 '''
 88 # lambda 获取2个数字的最大数
 89 fn1 = lambda a, b: a if a > b else b  # 参数列表:a,b 表达式是 a if a > b else b
 90 print(fn1(1000, 500))  # 1000
 91 
 92 '''
 93 5. lamdba表达式结合列表sort方法进行排序
 94 '''
 95 students = [
 96     {'name': 'TOM', 'age': 20},
 97     {'name': 'ROSE', 'age': 19},
 98     {'name': 'Jack', 'age': 22}
 99 ]
100 
101 # 语法: sort(key=lambda..., reverse=bool数据)
102 # 5.1通过key设置排序规则即按x['name']升序排序
103 students.sort(key=lambda x: x['name'])
104 print(students)  # [{'name': 'Jack', 'age': 22}, {'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}]
105 
106 # 5.2通过key设置排序规则即按x['name']降序排序
107 students.sort(key=lambda x: x['name'], reverse=True)
108 print(students)  # [{'name': 'TOM', 'age': 20}, {'name': 'ROSE', 'age': 19}, {'name': 'Jack', 'age': 22}]
109 
110 # 5.3 通过key设置排序规则即按x['age']升序排序
111 students.sort(key=lambda x: x['age'])
112 print(students)  # [{'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}, {'name': 'Jack', 'age': 22}]

 

标签:01,函数,age,匿名,print,lambda,name
From: https://www.cnblogs.com/allenxx/p/17538394.html

相关文章

  • P5298 [PKUWC2018]Minimax
    P5298[PKUWC2018]Minimax前言顺着线段树合并的标签找到这道题,感觉可做,但一写写了整整一天/kk。题意给出一个以\(1\)为根的\(n\)个节点的二叉树,每个叶子上有一个权值,非叶子节点的权值有一定概率为其子节点中权较大\(/\)较小的那个,问根节点每个不同权值的概率,答案按一定......
  • 暑假QBXT集训01
    Day1有向无环图一种特殊的有向图,没有任何环,简写为DAG。对于这种图,我们就有“拓扑序”。拓扑序不是唯一解。拓扑排序流程:每次删去一个没有入度的点加入拓扑序中,如此重复下去即可。P1807最长路题目描述:设\(G\)为有\(n\)个顶点的带权有向无环图,\(G\)中各个顶点的编......
  • Page001
    test_your_ncpw@pwn:~/Desktop$ncnode4.buuoj.cn29381catf*flag{80bfa2c9-25ff-4f51-9376-61ee8f577d02}rip如果是recvuntil("pleaseinput")会时间超时;因为此题出的比较草率,没有考虑关闭缓冲区,"pleaseinput"加入缓冲区之后并没有满,因此继续留在缓冲区即程序并没有输出......
  • 2012 javascript
    javascript  学习列表   BodyButtonCanvasEvent                                                                 02/07FormFrameFramesetIFrameImage                     ......
  • 动态规划之 01背包问题
    1. 什么是01背包问题?01背包问题是一种经典的组合优化问题,它的描述如下:有n种物品和一个容量为C的背包,每种物品有一个重量w[i]和一个价值v[i],其中i=1,2,…,n。问如何选择物品放入背包,使得背包内的物品总价值最大,且不超过背包的容量?这里的01表示每种物品只能选择放入或不放入,不......
  • [模板]01trie,维护异或最大值
    //查询异或最大值,每次插入和查询时间都是log(C)template<classT>classtrie01{vector<vector<T>>tree;public:trie01():tree(1,vector<T>(2,0)){}//插入待检查的数字voidinsert(Tx){intp=0;for(inti=sizeof......
  • 一文彻底搞懂MySQL基础:B树和B+树的区别 转载 https://blog.csdn.net/a519640026/arti
    写在前面大家在面试的时候,肯定都会被问到MySql的知识,以下是面试场景:面试官:对于MySQL,你对他索引原理了解吗?我:了解面试官:MySQL的索引是用什么数据机构的?我:B+树面试官:为什么要用B+树,而不是B树?我:…面试官:用B+树作为MySql的索引结构,用什么好处?我:…B树和B+树是MySQL索引使用的数据结构......
  • [安洵杯 2019]crackMe
    [安洵杯2019]crackMe将exe文件放入ida打开后,首先按shift+F12查看字符串,发现了base64的编码表和一串疑似经过加密/编码处理过后的字符串此时推测该字符串不是由正常base64编码得来,可能进行了换码操作,因此点进引用了该编码表的地方此时发现该函数对base64的编码表进行了大小写......
  • JavaScript-Day01
    1、JavaScript:是与网页交互的脚本语言。2、组成部分:{ ECMAScript,文档对象模型(DOM),浏览器对象模型(BOM)}    2.1 ECMAScript(核心):由ECMA-262定义并提供核心功能。<!--宿主环境-->        1.基本层面定义:语法、类型、语句、关键、保留字、操作符、全局对象。   ......
  • 题解 P8648【[蓝桥杯 2017 省 A] 油漆面积】
    怎么题解区全是扫描线,还有个\(O(n^3)\)暴力老哥。为防止误导新人,给个理论上稳过的\(O(n^2)\)解法。二维前缀和可以处理若干次单点加,最后若干次矩形查的问题。将其差分,即可处理若干次矩形加,最后若干次单点查的问题。于是我们使用差分将所有矩形加上,然后做一遍二维前缀和,即......