python中的匿名函数

一、匿名函数

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)

二、总结

通过这些内置的高阶函数,我们可以更加灵活的去操作序列类型,比起使用普通方法要更简单一点,希望各位读者能够灵活使用内置的高阶函数,这将使代码更加简洁。

以上就是本期匿名函数的所有内容,如果有需要修改的地方欢迎各位读者指出,下一期将给大家带来生成器和迭代器的内容,下期见~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值