一、匿名函数
1.1 匿名函数lambda
语法:
lambda 参数表达式:运算表达式
例:使用函数求数字6的平方
#普通写法
def multiple(X):
return X*X
print(multiple(6))
#输出结果
36
#匿名函数写法
Multiple = lambda X:X*X
print(Multiple(6))
#输出结果
36
可以看出,两种方法所求结果一致。
注意:
- 匿名含函数lambda并不会带来程序运行效率的提高,只会使代码更加的简洁
- 若使用匿名函数lambda,其内不要有循环,因为会影响代码的可读性
- 匿名函数lambda只是为了减少单行函数的定义而存在,若一个函数只有一个返回值并且只有一行代码,此时就可使用匿名函数lambda来对代码进行简化处理
1.2 高阶函数
所谓高阶函数其实就是把函数最为参数传入
例如,求任意两个数字的相反数之和
#定义求相反数的函数
def opposite(X):
return -X
#定义求和函数
def add(a,b,fn):
return fn(a) + fn(b)
result = add(1,-4,opposite) # 将求相反数的函数作为参数传入
print(result)
#输出结果
3
该例中,求和函数即为所谓的高阶函数,而求相反数的函数则被作为参数传入了求和函数中,经过该例子,不知道各位有没有对所谓的高阶函数有所理解,下面我们来学习一些常用的高阶函数。
1.2.2 map
map 函数用于改变序列中的所有元素,但改变的规则由我们传入的函数决定,另外,其返回结果是一个迭代器(不知道什么是迭代器的小伙伴也无需担心,这些在后面几期中都会有所介绍)
语法:
map(func,seq) 第一个参数是函数,第二个参数是序列类型
例如,将列表中的各个元素加1
# 普通写法
list1 = [1,2,3,4,5]
list2 = []
for i in list1:
list2.append(i+1)
print(list2)
#输出结果
[2, 3, 4, 5, 6]
#使用map函数的写法
list3 = [1,2,3,4,5]
def add1(x):
return x+1
print(map(add1,list3))
print(list(map(add1,list3)))
#输出结果
<map object at 0x00000128174FEF70> # 迭代器,若想查看其中的数据需要将其转为列表
[2, 3, 4, 5, 6]
可以看出,两种方法都能得到正确的结果,感兴趣的小伙伴可以想想,若使用匿名函数又该如何写,下面给出对应的代码供各位比对:
list1 = [1,2,3,4,5]
print(list(map(lambda X:X+1,list1)))
#输出结果
[2,3,4,5,6]
总结:
- map函数的作用是操作序列中的所有元素,并返回一个迭代器,若想查看数据,需要将其转换为列表
- 匿名函数lambda表达式可以专门用来配合高阶内置函数完成一些简单的功能
1.2.3 filter() -->过滤不需要的数据
该函数用于过滤序列中不符合条件的元素,得到的结果可以通过列表list转换
语法:
filter(func,seq) # 参数一为函数,参数二为序列类型
例如:保留一个序列中的所有奇数
# 普通写法
list1 = [1,2,3,4,5,6,7,8,9,10]
for i in list1:
if i % 2 == 0:
list.remove(i)
print(list1)
#输出结果
[1,3,5,7,9]
# 使用filter函数的写法
# 先定义一个求奇数的函数
def odd(X):
return X % 2 != 0
print(list(filter(odd,list1)))
#输出结果
[1,3,5,7,9]
可以看出,两种方法所求结果一致,感兴趣的小伙伴可以思考一下若使用匿名函数又该如何写,下面给出相应的代码供各位比对:
list1 = [1,2,3,4,5,6,7,8,9,10]
print(list(filter(lambda X:X % 2 != 0,list1)))
# 输出结果
[1,3,5,7,9]
1.2.4 sorted() -->排序
该函数可用于将序列类型中的元素进行排序,默认升序排列
例如:将list1 = [3,5,6,4,7,8,9,2,1] 中的元素进行排序
list1 = [3,5,6,4,7,8,9,2,1]
print(sorted(list1)) # 升序
print(sorted(list1,reverse=True)) # 降序
#输出结果
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
从该例可看出,sorted函数确实可以实现对序列中的元素进行排序,并且默认升序,若想要进行降序排序,则只需改一下参数reverse的值即可(reverse的值默认为False)
二、总结
通过这些内置的高阶函数,我们可以更加灵活的去操作序列类型,比起使用普通方法要更简单一点,希望各位读者能够灵活使用内置的高阶函数,这将使代码更加简洁。
以上就是本期匿名函数的所有内容,如果有需要修改的地方欢迎各位读者指出,下一期将给大家带来生成器和迭代器的内容,下期见~