自定义匿名函数

  1. # -*- coding: utf-8 -*-
  2. # @Author: afei
  3. # 自定义匿名函数
  4. def add(a, b, fn):
  5. c = fn(a, b)
  6. return c
  7. # print(add(1,3))
  8. def sum(x,y):
  9. return x + y
  10. def foo(x, y):
  11. return x - y
  12. # print(foo(1,2))
  13. x1 = add(2, 3, sum)
  14. print(x1)
  15. x2 = add(5,3 ,foo)
  16. print(x2)

>

  1. 5
  2. 2

lambda匿名函数

  1. 匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的;
  2. 匿名函数的参数规则、作用域关系与有名函数是一样的;
  3. 匿名函数的函数体通常应该是 一个表达式,该表达式必须要有一个返回值;
    1. tes = lambda x,y: x**y
    2. print(tes(2,2))
    结果:4

    lambda匿名函数的应用:

    max,min,sorted,map,reduce,filter

    max函数

    1. list2 = [{'a': 10,'b': 12},{'a':11,'b':13},{
    2. print(max(list2, key=lambda y:y['b']))
    结果:
    {‘a’: 12, ‘b’: 14}

min函数

  1. list2 = [{'a': 10,'b': 12},{'a':11,'b':13},{
  2. print(min(list2, key=lambda y:y['b']))

结果:
{‘a’: 10, ‘b’: 12}

map函数

image.png
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回遍历序列,对序列中每个元素进行函数操作,最终获取新的序列。

  1. list1 = [2,5,8,10,100]
  2. result = (map(lambda x: x - 1, list1))
  3. result2 = list(result)
  4. print(result2)

结果:
[1, 4, 7, 9, 99]

  1. list1 = [2,5,8,10,100]
  2. result = lambda x: x if x % 2 == 0 else x + 1
  3. print(result(5))

结果:
6
问题1.求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表

  1. list1 = [1,2,3,4,5,6,7,8,9]
  2. result = map(lambda x: x*x, list1)
  3. print(list(result))

结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]

  1. list1 = [2,5,8,10,100]
  2. result = map(lambda x: x if x % 2 == 0 else x + 1,list1)
  3. print(list(result))

结果:
[2, 6, 8, 10, 100]

enumerate函数

  • enumerate()是python的内置函数
  • enumerate在字典上是枚举、列举的意思
  • 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
    enumerate多用于在for循环中得到计数 ```python list1 = [‘飞哥’,12,’python’]

如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:

for i in range(len(list1)): print(i, list1[i])

  1. 结果:<br />0 飞哥<br />1 12<br />2 华仔
  2. 上述方法有些累赘,利用enumerate()会更加直接和优美:
  3. ```python
  4. list1 = ['飞哥',12,'python']
  5. for index, value in enumerate(list1):
  6. print(index,value)

结果:
0 飞哥
1 12
2 华仔

reduce函数

reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(func,[1,2,3]) 等同于 func(func(1,2),3)
对于序列内所有元素进行累计操作
image.pngimage.png

#接受一个list并利用reduce()求和
from functools import reduce
list1 = [1,2,3,4,5,6,7,8,9]
print(reduce(lambda x, y: x + y,list1))
#1+2+3+4+5...+9 = 45

结果:
45

filter函数

filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。对于序列中的元素进行筛选,最终获取符合条件的序列
问题1: 在一个list中,删掉偶数,只保留奇数

list1 = [1,2,3,4,5,6,7,8,9]
result = filter(lambda x:x % 2==1,list1)
print(list(result))

结果:
[1, 3, 5, 7, 9]

sorted函数

sorted(iterable, /, *, key=None, reverse=False)
接收一个key函数来实现对可迭代对象进行自定义的排序
可迭代对象:主要与列表,字符串,元祖,集合和字典
key:接受一个函数,根据此函数返回的结果,进行排序
reverse:排序方向,默认为从小到大,reverse=True为逆向

# 对列表按照绝对值进行排序
list1 = [1,2,3,4,5,6,7,8,9,-2,-9]
result = sorted(list1, key= lambda x:abs(x))
print(result)

结果:
[1, 2, -2, 3, 4, 5, 6, 7, 8, 9, -9]

# 按照成绩排列名单
list1 = {'feige': 66,'tom':88,'jack':68}
result = sorted(list1, key= lambda x:list1[x],reverse=True)
print(result)

结果:
[‘tom’, ‘jack’, ‘feige’]

参考链接:https://blog.csdn.net/sinat_38682860/article/details/109450147 这位博主写的非常详细!