廊坊酒店网站建设,网络培训投诉平台,河南省建设厅网站 吴浩,网站怎么做 吸引人目录 1、Lambda 表达式是什么2、和def所定义的python函数的区别3、Lambda 表达式的定义3、Lambda 表达式的特点4、Lambda 表达式中用三目运算语句5、lambda的参数形式5.1、Lambda 表达式直接调用。5.2、无参数5.3、一个参数5.3、默认参数5.4、可变参数#xff1a;**args5.5、可… 目录 1、Lambda 表达式是什么2、和def所定义的python函数的区别3、Lambda 表达式的定义3、Lambda 表达式的特点4、Lambda 表达式中用三目运算语句5、lambda的参数形式5.1、Lambda 表达式直接调用。5.2、无参数5.3、一个参数5.3、默认参数5.4、可变参数**args5.5、可变参数**kwargs 6、排序中使用lambda表达式6.1、列表排序使用 Lambda 表达式6.1.1、列表排序不指定 key6.1.2、列表排序指定 key6.1.3、列表排序6.1.4、列表内嵌套列表排序使用 Lambda 表达式。 6.2、字典排序6.2.1、字典排序键key排序6.2.2、字典排序值value排序使用 Lambda 表达式6.2.3、字典内嵌套字典排序使用 Lambda 表达式 7、lambda表达式作为map ()的第一参数8、lambda表达式作为filter ()的第一参数 1、Lambda 表达式是什么
lambda表达式其实就是Python的一个函数语法一样。所以也称为匿名函数。 所谓匿名函数通俗地说就是没有名字的函数。 基本功能跟使用def所定义的python函数是一样的。 但是、和def所定义的区别是 lambda表达式基本在一行以内就完整的表达了整个函数的运算逻辑。 我们直接看 和def的对应关系你就明白了。
2、和def所定义的python函数的区别
具体的我们看一下def语句的函数定义与相应的lambda表达式之间的对应关系你就能明白。
def 函数名(参数1, 参数2, ...):return 返回值函数名 lambda 参数1, 参数2, ...: 返回值注意Lambda 表达式中 lambda 在oython中是个关键字。
我们看实例
# def定义的加法函数
def add_def(a, b1):return a b# Lambda 表达式:定义的加法函数
# 这里为了区分方便阅读函数名不太一致。
add_lambda lambda a, b1: a b实际的代码结果
def add_def(a, b1):return a badd_lambda lambda a, b1: a bprint(add_def(4, 4)) # 8print(add_def(4)) # 5print(add_lambda(4, 4)) # 8print(add_lambda(4)) # 5对应关系你很清楚理解 Lambda 表达式是什么了。 现在我们看看 Lambda 表达式的定义。
3、Lambda 表达式的定义
lambda parameters: expressionlambda关键字parameters参数列表是可选的。参数列表的参数个数可以是零个或者多个如果有多个则用逗号分隔其规则跟普通函数的规则一致但不需要用括号。expression是一个估值表达式这个表达式的估值结果就是lambda函数的返回值。expression不能包含分支或者循环但可以是三目运算语句也不能包含return或者yield语句。 所谓估值表达式就是最终能被运算成一个值的表达例如常量、变量、运算表达式、函数调用、列表切片等等。 ※关于【3、Lambda 表达式的定义】内容来自知乎作者Python3基础lambda表达式
虽然 Lambda 表达式 和def定义的函数 是一样的但是Lambda 表达式 的使用是根据自己特点有限制的。 我们接下来看一下Lambda 表达式的特点。
3、Lambda 表达式的特点
参数不受限以接收任意多个参数 (包括可选参数) 参数列表的参数个数可以是零个或者多个如果有多个则用逗号分隔其规则跟普通函数的规则一致但不需要用括号。
例有四个参数逗号隔开
add_lambda lambda a, b, c1, d2: a b c dprint(add_lambda(4, 4)) # 11print(add_lambda(4, 4, 4, 4)) # 16功能简单。 单行expression决定了lambda函数不可能完成复杂的逻辑只能完成非常简单的功能。所有的函数逻辑必须一行之内完成。 表达式有唯一性。 lambda表达式只允许包含一个表达式不能包含复杂语句该表达式的运算结果就是函数的返回值。 因为最终结果一定要被运算成一个值例如常量、变量、运算表达式、函数调用、列表切片等等。
也真因为第三个特点最终结果一定要被运算成一个值。 因此基于这个特点Lambda 表达式中可以包含三目运算语句因为三目运算语句的结果就是一个值。
4、Lambda 表达式中用三目运算语句
关于三目运算语句请参照三目运算语句
直接上代码
get_odd_even lambda x: 偶数 if x % 2 0 else 奇数print(get_odd_even(3))
# 奇数print(get_odd_even(4))
# 偶数等价以下语句
def get_odd_even(x):if x % 2 0:str 偶数else:str 奇数return strprint(get_odd_even(3))
# 奇数print(get_odd_even(4))
# 偶数5、lambda的参数形式
5.1、Lambda 表达式直接调用。
直接看示例
print((lambda a, b: a b)(1, 2)) # 35.2、无参数
print((lambda: 100)()) # 1005.3、一个参数
print((lambda a: a)(hello world)) # hello world5.3、默认参数
print((lambda a, b, c100: a b c)(10, 20)) # 1305.4、可变参数**args
返回值是个元组。
print((lambda *args: args)(10, 20, 30)) # (10, 20, 30)5.5、可变参数**kwargs
返回值是个字典。
print((lambda **kwargs: kwargs)(namepython, age20)) # {name: python, age: 20}主要介绍 sorted()sort()max()min()参数key中使用 Lambda 表达式。
6、排序中使用lambda表达式
6.1、列表排序使用 Lambda 表达式
6.1.1、列表排序不指定 key
TestList [Charle, Bob, Alice]TestListSorted sorted(TestList)print(TestListSorted)
# [Alice, Bob, Charle]6.1.2、列表排序指定 key
本例在参数key中指定返回字符数的内置函数 len()从而按字符数降序排序。
TestList [Charle, Bob, Alice]TestListSorted sorted(TestList, keylen)print(TestListSorted)
# [Bob, Alice, Charle]6.1.3、列表排序
这时我们把 key 执行成 Lambda 表达式。可以将任意函数应用于各元素并根据其结果进行排序。 例如当将用于获取第二个字符的lambda表达式【lambda x: x[1]】指定为key时按照第二个字符的字母顺序进行排序。 下面示例可以看的更清楚 1、首先我们要知道
lambda x: x[0]是在取列表各个元素对应下标的值。
print((lambda x: x[0])([1, 2, 3])) # 1
print((lambda x: x[1])([1, 2, 3])) # 2
print((lambda x: x[2])([1, 2, 3])) # 3print((lambda x: x[0])(ABC)) # A
print((lambda x: x[1])(ABC)) # B
print((lambda x: x[2])(ABC)) # C2、所以我们直接看例子
TestList [CEG, BFH, ADI]# 以列表中列表的第一个字母排序
print(sorted(TestList, keylambda x: x[0]))
# [ADI, BFH, CEG]# 以列表中列表的第二个字母排序
print(sorted(TestList, keylambda x: x[1]))
# [ADI, CEG, BFH]# 以列表中列表的第三个字母排序
print(sorted(TestList, keylambda x: x[2]))
# [CEG, BFH, ADI]6.1.4、列表内嵌套列表排序使用 Lambda 表达式。
Testlist [[4, 2, 9], [1, 5, 6], [7, 8, 3]
]# 以列表中列表的第一个数排序
print(sorted(Testlist, keylambda x: x[0]))
# [[1, 5, 6], [4, 2, 9], [7, 8, 3]]# 以列表中列表的第二个数排序
print(sorted(Testlist, keylambda x: x[1]))
# [[4, 2, 9], [1, 5, 6], [7, 8, 3]]# 以列表中列表的第三个数排序
print(sorted(Testlist, keylambda x: x[2]))
# [[7, 8, 3], [1, 5, 6], [4, 2, 9]]# 以列表中列表的第一个数排序且降序
print(sorted(Testlist, keylambda x: x[0], reverseTrue))
# [[7, 8, 3], [4, 2, 9], [1, 5, 6]]6.2、字典排序
6.2.1、字典排序键key排序
dict {c: 1, b: 2, a: 3}print(sorted(dict))
# [a, b, c]print(sorted(dict, reverseTrue))
# [c, b, a]6.2.2、字典排序值value排序使用 Lambda 表达式
dict {c: 1, b: 2, a: 3}print(sorted(dict, keylambda x: dict[x]))
# [c, b, a]print(sorted(dict, keylambda x: dict[x], reverseTrue))
# [a, b, c]6.2.3、字典内嵌套字典排序使用 Lambda 表达式
dict {a: {x: 3, y: 2, z: 1},b: {x: 2, y: 1, z: 3},c: {x: 1, y: 3, z: 2}}# 以内部字典的x对应的值排序
print(sorted(dict, keylambda x: dict[x][x]))
# [c, b, a]# 以内部字典的y对应的值排序
print(sorted(dict, keylambda x: dict[x][y]))
# [b, a, c]# 以内部字典的z对应的值排序
print(sorted(dict, keylambda x: dict[x][z]))
# [a, c, b]# 以内部字典的x对应的值排序,并降序
print(sorted(dict, keylambda x: dict[x][x], reverseTrue))
# [a, b, c]7、lambda表达式作为map ()的第一参数
list [0, 1, 2, 3]map_square map(lambda x: x**2, list)print(map_square)
# map object at 0x1072fd128print(list(map_square))
# [0, 1, 4, 9]等同于以下语句
list [0, 1, 2, 3]l_square [x**2 for x in list]print(l_square)
# [0, 1, 4, 9]8、lambda表达式作为filter ()的第一参数
list [0, 1, 2, 3]filter_even filter(lambda x: x % 2 0, list)print(list(filter_even))
# [0, 2]等同于
list [0, 1, 2, 3]l_even [x for x in list if x % 2 0]print(l_even)
# [0, 2]如果有问题请指出或者copy了谁的也请指出。 会及时更正。