python内置函数lambda函数常见用法

一、关于lambda函数;
是Python编程语言中使用较多的一个内置函数。他可以在不指定函数名称的情况下定义一些简单逻辑的函数。可以定义一个函数给变量。
二、使用方法:
语法:
在Python中,lambda的语法形式如下:
lambda 参数: 表达式
其中,lambda是固定的关键字,参数和表达式由用户自定义:

  1. 这里的参数是参数列表,它的结构与Python中函数(function)的参数列表是一样的。具体来说,参数可以有非常多的形式。例如:
    a=1, b=2
    *args
    **kwargs
    等等!
  2. 表达式是一个关于参数的公式。表达式中的参数需要在参数中预定义,且表达式是单行的:
    None
    a + b
    sum(a)
    X if X >Y else Y
  3. 这里的lambda 参数: 表达式表示的是一个函数。这个函数叫做lambda函数,这个函数已参数为输入,表达式运行结果为输出,用完就没有了。不会继续存在

一些lambda函数示例:
lambda x, y: xy;函数输入是x和y,输出是它们的积xy
lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(注意要求输入参数必须能够进行加法运算)
lambda **kwargs: 1;输入是任意键值对参数,输出是1

常见用法(通常是和一些高阶函数组合使用!):
由于lambda本质上只有一种用法,那就是定义一个lambda函数。在实际中,根据这个lambda函数应用场景的不同,lambda函数有以下几种用法:
a.将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
例如,执行语句add=lambda x, y: x+y,定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add便成为具有加法功能的函数。
例如,执行add(3,2),输出为5。
b.将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。
例如,为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调用:time.sleep=lambda x:None。这样,在后续代码中调用time库的sleep函数将不会执行原有的功能。例如,执行time.sleep(3)时,程序不会休眠3秒钟,而是什么都不做。
c. 将lambda函数作为其他函数的返回值,返回给调用者。
函数的返回值也可以是函数。例如return lambda x, y: x+y返回一个加法函数。这时,lambda函数实际上是定义在某个函数内部的函数,称之为嵌套函数,或者内部函数。对应的,将包含嵌套函数的函数称之为外部函数(闭包)。内部函数能够访问外部函数的局部变量。
d. 将lambda函数作为参数传递给其他函数(高阶函数)。
部分Python内置函数接收函数作为参数。典型的此类内置函数有filter/map/sorted。
高阶函数:
定义:
1.函数接受一个或多个函数作为参数传入
2.函数返回一个函数
以上两个条件满足一个条件就称之为高阶函数
filter函数:返回满足过滤要求的元素
用法:
filter(function/None, iterable)–>filter object
参数1:函数或空,要执行过滤的条件
参数2:可迭代对象,要被过滤的对象
返回值:filter函数执行完成后,会返回一个新的可迭代对象
此时lambda函数用于指定过滤列表元素的条件。
例如:
filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]

# filter函数
"""
作用:筛选可迭代对象iterable中的数据,返回一个可迭代对象,此可迭代对象将对iterable进行筛选
函数func将对iterable中的每个元素进行求值,返回False 丢弃,返回True则保留此数据

```python
"""


# 示例:求奇数
def isodd(x):
    return x % 2 == 1

打印10内的奇数

for x in filter(isodd, range(0, 10)):
print(x)

生成10以内的偶数,用filter实现,使用列表推导式

L = [x for x in filter(lambda x1: x1 % 2 == 0, range(0, 10))]
print(L)

sorted函数:排序
作用:讲原可迭代对象的数据进行排序,生成排序后的列表
格式:sorted(iterable, key = None, reverse = False)
iterable:可迭代对象
key:绑定函数,用来提供一个排序的依据
reverse 是否降序排列-从大到小,默认从小到大

用法:sorted(待排序的对象,key=xx, reverse=False)

此时lambda函数用于指定对列表中所有元素进行排序的准则。
示例:
L = [5, -2, -4, 0, 3, 1]
L2 = sorted(L)
L3 = sorted(L, reverse=True)
L.sort(reverse=True)
print(L)
print(L2)
print(L3)

按离0最近来排序

L4 = sorted(L, key=abs)
print(L4)
“”"
[-4, -2, 0, 1, 3, 5]
[5, 3, 1, 0, -2, -4]
[0, 1, -2, 3, -4, 5]
“”"


**map函数:将可迭代对象按函数执行返回新的迭代对象。**
	用法:map(func, *iterables)-->map object
	func:要执行的函数,
	iterable:可迭代对象,func的输入参数
	
	作用:将iterable中的元素,作为输入放到func中执行,得到一个行的iterable1,并返回。注意,map不改变原iterable,而是返回一个新iterable1
此时lambda函数用于指定对列表中每一个元素的共同操作。
例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。
示例:

```python
# 1.求1--9 的平方和
s = sum(map(lambda x: x ** 2, range(1, 10)))
print(s)
# 3.求1 ** 9 + 2 **8 + 3 **7 +。。。 + 9**1 的和
s3 = sum(map(pow, range(1, 10), range(9, 0, - 1)))
print(s3)
.	"""
map函数:
用法:map(function,iterable,...)
function:接受一个函数名,用于对后面的可迭代对象进行操作; 
iterable:接受一个或多个可迭代的序列,可以有多个可迭代对象
return:返回一个通过函数处理之后的map对象
map函数返回的是一个map对象,要获取里面的值,需要将map对象转化未list、tuple 等对象

"""


def calculator_add(x, y):
    return x + y


res1 = list(map(calculator_add, [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]))
print(res1)
# [2, 4, 6, 8, 10]

# map 函数与lambda函数使用
# 一、返回列表
res2 = list(map(lambda x, y: x * y, [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]))
print(res2)
# [1, 4, 9, 16, 25]
# 二、返回元组
res3 = list(map(lambda x, y: (x * y, x + y), [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]))
print(res3)
# [(1, 2), (4, 4), (9, 6), (16, 8), (25, 10)]

# map 函数传入function。可以将多个列表相同位置的元素归并到一个元组
# 示例:
res4 = (list(map(lambda x, y: (x, y), [1, 2, 3, 4, 5], [1, 2, 3, 4, 5])))
print(res4)
# [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]

# map可以直接将字符串转换为列表/元组
res5 = tuple(map(int, "123456789"))
res6 = list(map(int, "987654321"))
print(res5)
print(res6)
# (1, 2, 3, 4, 5, 6, 7, 8, 9)
# [9, 8, 7, 6, 5, 4, 3, 2, 1]

# map函数可以获取字典中的key,放到列表、元组中
res7 = list(map(str, {"name": "xiaoli", "age": 20, "gender": "girl"}))
print(res7)
# ['name', 'age', 'gender']

Reference:https://blog.csdn.net/quanlingtu1272/article/details/95482253?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160269214819724838547536%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160269214819724838547536&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-95482253.pc_first_rank_v2_rank_v28&utm_term=python+map&spm=1018.2118.3001.4187
(个人学习记录。也参考了一些博文,还有一个博主的链接找不到了,如有问题,欢迎指正,共同进步)

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页