python之匿名函数和内置函数
1、匿名函数
1.1 什么是匿名函数?
对于某些函数,由于其函数体的片段较为简单,为了简化其定义的方式,在这了采用匿名函数的形式直接定义。例如我们想要定义的是一个a+b的简单的函数过程。如果采用常规的函数定义方式为:
def add_o(a,b):
return a+b
1.2 匿名函数的定义方式
注意:如果运算f中是包含if-else结构的,结构为 x if 条件 else 其他值 。也就是说,首先省去了冒号,然后满足if条件的结果x被放在了if条件的前面。
1.3 匿名函数的使用
1.3.1 基本方式
对于上面简单的a+b的例子,我们直接使用:
add_l = lambda a,b:a+b
result = add_l(1,2) #计算1+2 的结果,将结果返回给result
print(result)
####输出
3
在这里,add_o和add_l实际上指的都是a+b这个函数,对于add_o,我们采用直接定义的方式。对于add_l,我们实际上是先定义了一个函数,然后将这个a+b的函数的赋给add_l。调用add_l就相当于调用这个lambda函数。最后用result来接收这个函数的返回值。
1.3.2 作为参数
下面在举一个例子:lambda函数可以作为参数进行传入
def func(x,y,fun):
print(x)
print(y)
result = fun(x,y)
print(result)
func(1,2,lambda a,b:a+b)
##输出
1
2
3
1.3.3 和内置函数相结合
lis = [{'a':10,'b':20},{'a':9,'b':15},{'a':18,'b':7}]
res = max(lis,key= lambda x:x['a']) #用lambda函数对list中每一个元素中的a对应的数字进行比较。
print(res)
##输出
{'a': 18, 'b': 7}
lis = [{'a':10,'b':20},{'a':9,'b':15},{'a':18,'b':7}]
res = min(lis,key= lambda x:x['a'])
print(res)
##输出:
{'a': 9, 'b': 15}
lis = [1,2,3,4,5,6]
res = list(map(lambda x:x+1,lis))
print(res)
## 输出:
[2, 3, 4, 5, 6, 7] #对原来列表的每一个参数+1
2 、内置函数
内置函数指的就是Python内部基本无需导入其他模块,自带的一些方法。简单的熟悉一下这些代码,可以帮助我们在实际的编程中省去很多时间。
2.1 常见内置函数和基本使用
-
max :最大值
-
min: 最小值
-
map(func,*iterables)
第一个参数表示一个函数,第二个参数是一个迭代器。func对迭代器中的每一个参数进行func中定义的操作。lis = [1,2,3,4,5,6] res = list(map(lambda x: x if x % 2 == 0 else x+1,lis)) print(res) ## 输出: [2, 2, 4, 4, 6, 6] #奇数+1,偶数不加
-
sorted(iterator,key,reverse):第一个参数是迭代器,第二个参数是用于排序的关键字,第三个参数是是否翻转(默认是从小到大,翻转之后从大到小)
lis = [{'a':10,'b':20},{'a':9,'b':15},{'a':18,'b':7}] res = sorted(lis,key=lambda x:x['a']) print(res) #输出: [{'a': 9, 'b': 15}, {'a': 10, 'b': 20}, {'a': 18, 'b': 7}]
lis = [{'a':10,'b':20},{'a':9,'b':15},{'a':18,'b':7}] res = sorted(lis,key=lambda x:x['a'],reverse=True) print(res) # 输出 [{'a': 18, 'b': 7}, {'a': 10, 'b': 20}, {'a': 9, 'b': 15}]
-
reduce(func,*iterator,[,initail=]):对迭代器中的元素进行加减乘除运算的函数 。所属模块 from functools import reduce
func是对迭代器中元素进行操作的函数,initial是在计算过程中的一个初始元素from functools import reduce tutle = (1,2,3,4,5) res = reduce(lambda x,y:x+y,tutle) #对元祖内的数据进行累计求和 #输出 15
from functools import reduce tutle = (1,) res = reduce(lambda x,y:x+y,tutle,10) #以10作为整个计算的初始值 print(res) #输出 11
注意:reduce不接受key=value这种传参的方式
-
filter(func,*iterator)函数:主要用于过滤,func是用于过滤的函数,iterator迭代器
lis = [6,5,3,4,8,2,1] res = list(filter(lambda x:x>3,lis)) print(res) #输出: [6, 5, 4, 8]
lis = [{'a':10,'b':20},{'a':9,'b':15},{'a':18,'b':7}] res = list(filter(lambda x:x['a']>10,lis)) print(res) #输出: [{'a': 18, 'b': 7}]