自定义匿名函数
# -*- coding: utf-8 -*-
# @Author: afei
# 自定义匿名函数
def add(a, b, fn):
c = fn(a, b)
return c
# print(add(1,3))
def sum(x,y):
return x + y
def foo(x, y):
return x - y
# print(foo(1,2))
x1 = add(2, 3, sum)
print(x1)
x2 = add(5,3 ,foo)
print(x2)
>
5
2
lambda匿名函数
- 匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的;
- 匿名函数的参数规则、作用域关系与有名函数是一样的;
- 匿名函数的函数体通常应该是 一个表达式,该表达式必须要有一个返回值;
结果:4tes = lambda x,y: x**y
print(tes(2,2))
lambda匿名函数的应用:
max,min,sorted,map,reduce,filtermax函数
结果:list2 = [{'a': 10,'b': 12},{'a':11,'b':13},{
print(max(list2, key=lambda y:y['b']))
{‘a’: 12, ‘b’: 14}
min函数
list2 = [{'a': 10,'b': 12},{'a':11,'b':13},{
print(min(list2, key=lambda y:y['b']))
结果:
{‘a’: 10, ‘b’: 12}
map函数
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回遍历序列,对序列中每个元素进行函数操作,最终获取新的序列。
list1 = [2,5,8,10,100]
result = (map(lambda x: x - 1, list1))
result2 = list(result)
print(result2)
结果:
[1, 4, 7, 9, 99]
list1 = [2,5,8,10,100]
result = lambda x: x if x % 2 == 0 else x + 1
print(result(5))
结果:
6
问题1.求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表
list1 = [1,2,3,4,5,6,7,8,9]
result = map(lambda x: x*x, list1)
print(list(result))
结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
list1 = [2,5,8,10,100]
result = map(lambda x: x if x % 2 == 0 else x + 1,list1)
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])
结果:<br />0 飞哥<br />1 12<br />2 华仔
上述方法有些累赘,利用enumerate()会更加直接和优美:
```python
list1 = ['飞哥',12,'python']
for index, value in enumerate(list1):
print(index,value)
reduce函数
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(func,[1,2,3]) 等同于 func(func(1,2),3)
对于序列内所有元素进行累计操作
#接受一个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
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))
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 这位博主写的非常详细!