目录
一、函数进阶
1、高级用法
1.函数可以被引用(可以赋值)
def fn(): print("我是fn") f = fn # fn 函数本身 f()
2.函数可以作为参数传入另外一个函数
def fn(): print("我是fn") def fn2(x): # x = fn x() # fn() fn2(fn)
3.可以将函数作为返回值
def fn(): print("我是fn") def fn2(x): return x # return 可以返回任意类型,可以返回一个函数 a = fn2(fn) a() # fn() a() # fn() a() # fn()
4.函数可以作为容器的元素
def fn(): return 10 def fn2(): print("hello") lis = [1, 3, 2, fn(), fn2] print(lis[3]) f = lis[4] f()
二、匿名函数(lambda)
lambda函数的语法只包含一个语句,如下
lambda 参数列表:运算表达式 # def fn(x): # return x * x # 匿名写法 f = lambda x:x*x print(f(5))
总结:
1.lambda并不会带来程序运行效率的提高,只会使代码更简洁
2.如果使用lambda,lambda内不要循环,请使用标准函数来完成。目的是为了代码有可重用性和可读性
3.lambda只是为了减少单行函数的定义而存在
三、高阶函数
1、高阶函数简介
map,filter,sorted
作用:
map:修改序列
filter:过滤序列
sorted:排序序列
func写法
形参:都一样,表示每个元素
return map:return表示修改结果 filter:return表示过滤结果 sorted:return表示排序目标
高阶函数:函数作为参数的函数
abs() : 返回数字的绝对值
round() : 作用是四舍五入
偶数开头,小数大于五入
奇数开头,小数五入
任意两个数字,对2个数字求绝对值后进行求和
# 任意两个数字,对2个数字求四舍五入后进行求和 def ab_sum(a, b, f): return f(a) + f(b) result = ab_sum(-1, -4.5, abs) # 求2个数绝对值的和 print(result) result = ab_sum(-1, -4.5, round) # 求2个数四舍五入的和 print(result)
python常用3个高阶内置函数
map、filter、sorted
2、map()
map(func,seq) : 将传入的函数变量func作用到序列变量的每一个元素中,并将组成新的迭代器返回
map(func,seq) - seq 就是要改的序列 - func 要传入的函数
# 将list1序列中各个数字加一 list1 = [1, 2, 3, 4, 5] print(list(map(lambda x:x+1,list1)))
总结:
1.map高阶内置函数作用是操作序列中的所有元素,并返回一个迭代器,迭代器要转回列表
2.lambda表示可以专门配合高阶内置函数来做简单实现
3、filter()
fillter(func,seq) : 过滤序列类型,过滤掉不符合条件的元素,结果也是迭代器,要通过list转换
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
求序列中所有的偶数
# 老做法 # list2 = [] # for i in list1: # if i % 2 == 0: # list2.append(i) # print(list2)
def func(x): # 这个x就代表每个元素,和map一样 # 返回值是一个布尔值,如果为真,则保留,否则过滤 return x % 2 == 0 print(list(filter(func, list1))) list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(list(filter(lambda x:x%2==0, list1)))
4、sorted()
list1 = [2, 4, 1, 3, 5, 6, 9, 7]
升序
print(sorted(list1))
**降序
print(sorted(**list1,reverse=True)) list1 = ["aa:69", "bb:79", "cc:100", "dd:55"]
将分数升序排序
def f(x): # x代表每一个值,和map filter一样的 return int(x.split(":")[1]) # 返回要排序的值 print(sorted(list1, key=f,reverse=True))