Python匿名函数

匿名函数定义

  • 匿名就是指没有名字。
  • 如果函数比较简单,有时不需要给函数命名,使用lambda表达式来使用匿名函数。
  • lambda 函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间里的参数。

匿名函数语法

  • 变量名 = lambda 参数:表达式(block)
  • 参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数
  • 表达式:不能包含循环,return,可以包含if…else…
  • 表达式计算的结果为lambda函数的返回值。
  • 默认参数,关键字参数以及不定长参数都可以正常使用
"""
1. 定义时=前的变量名s就指向lambda函数的地址,调用匿名函数用它调用。
2. 表达式的值作为lambda函数的返回值。
"""
s = lambda a, b : a+b		#形参:(a,b) return a+b
print(s(2,3),s)

result:
5 <function <lambda> at 0x7f5e876c06a8>
# 默认参数,关键字参数以及不定长参数都可以正常使用
s = lambda a, *args :args + (66, 88)
print(s(2, 3, 4, 5))
(3, 4, 5, 66, 88)

匿名函数用途

  • 简化函数
  • 作为参数

lambda函数可以作为参数

"""
1. 当调用s()时,func = lambda a, b : a+b+20 即 (func(a,b):return a+b+20)
2. 第一个lambda函数的返回值是func(x, y)即func(1,2)传到func(a,b):return a+b+20)则为23
"""
s = lambda x, y, func : func(x, y)
result = s(1, 2, lambda a, b : a+b+20)
print(result)

result:
23

lambda函数配合内置函数

  • 在有些内置函数中有key参数可以使用lambda函数
"""
1. max函数将元素一个一个取出来比较,list可以直接比。
2. 字典不可以直接比,但是可以按照某个key值比,所以key=lambda x:x["a"]表示每次比较时取出的元素x,返回x中key为"a"的value进行比较。
"""
list1 = [7,3,2,6,8,9,13,18]
print(max(list1))

result:
18

list2=[{"a":15, "b":10},{"a":3, "b":6},{"a":8, "b":7},{"a":30, "b":40}]
print(max(list2, key=lambda x:x["a"]))
result:
{'a': 30, 'b': 40}

lambda函数和map

  • map()利用指定函数对可迭代对象的元素做映射。
  • 每次取出一个元素做映射。
map(func, *iterables) --> 返回map object
list1 = [1,2,3,4,5,6]
result = map(lambda x: x if x%2==0 else x+8, list1)
print(list1)
print(list(result))

result:
[1, 2, 3, 4, 5, 6]
[9, 2, 11, 4, 13, 6]

lambda函数和reduce函数

  • reduce函数会对参数序列中元素进行累积。
  • 函数将一个数据集合(链表,元组等)中的所有数据进行下列步骤操作:
    • 用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作。
    • 得到的结果再与第3个数据用 function 函数运算,以此类推,直至最后一个元素。
    • reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
      ((((1+2)+3)+4)+5)
"""
如果存在initial,则将其放在计算序列的项之前,如果序列为空,则作为默认值。
返回值为累积计算结果。
"""
reduce(function, sequence[, initial]) -> value
"""sum1运算过程
1. x=1,y=2
2. x=3,y=3
3. x=6,4
...
"""
from functools import reduce
sum1 = reduce(lambda x, y: x+y, [1,2,3,4,5],8)
sum2 = reduce(lambda x, y: x+y, [],8)
print(sum1)
print(sum2)
result:
23
8

lambda函数和filter

  • filter() 用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的filter对象。
  • 序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
filter(function, iterable)
from math import *
result = filter(lambda x:sqrt(x)%1==0, range(100))
print(list(result))

result:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

lambda函数和sorted

  • 可以提供自定义键函数来自定义排序依据。
  • 可以设置反向标志按降序排列
sorted(iterable, /, *, key=None(function), reverse=False)
# key=lambda x:x[1]表示取出每一个列表元素的第2个值作为排序依据
list1=[('b',2),('a',15),('c',7),('d',4)];
result=sorted(list1, key=lambda x:x[1])
print(result)

result:
[('b', 2), ('d', 4), ('c', 7), ('a', 15)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值