匿名函数 lambda
lambda 参数列表:运算表达式
def fn(x):
return x*x
print(fn(5))
f = lambda x:x*x
print(f(5))
- lambda并不会带来程序运行效率的提升,只会使代码更加的简洁。
- 如果使用lambda,lambda内不要有循环,因为可读性不好,有的话还是使用标准函数完成,目的是为了代码有可重复性和可读性。
- lambda只是为了减少单行函数的定义而存在,如果一个函数只有一个返回值,只有一句代码,就可以使用lambda。
高阶函数
高阶函数其实就是把函数作为参数传入,就是把一个函数作为另一个函数的参数传入。
abs()完成对数字绝对值计算
print(abs(-5))
sum() 求和
sum(可迭代对象,指定一个相加的参数如果没有默认为0)
print(sum([1,2,3,4,5]))
print(sum((1,2,3,4,5),1)) # 元组计算总和后再加 1
round()四舍五入 精度有问题
print(round(4.3))
print(round(4.6))
print(round(4.5)) #雷区
任意两个数字,对两个数字求绝对值后进行求和
def num_sum(x,y):
return abs(x) + abs(y)
print(num_sum(-6,-2))
任意两个数字,对两个数字求四舍五入后进行求和
def num_round(x,y):
return round(x) + round(y)
print(num_round(-6.2,-2.5))
def num_abs(x,y,f):
return f(x) + f(y)
print(num_abs(-6.2,-2.5,abs)) #把abs赋值给f
def num_abs(x,y,f):
return f(x) + f(y)
print(num_abs(-6.2,-2.5,round)) #把round赋值给f
函数三剑客:map,reduce,filter
map()
map的返回结果是一个迭代器,想看最终结果要转为list
map(func,seq)第一个参数是给一个函数,第二个是给一个序列类型。
将列表序列中各个元素加1
list1 = [1,2,3,4,5]
list2 = []
for i in list1:
list2.append(i+1)
print(list2)
def add1(i):
return i+1
print(list(map(add1,list1)))
map内置函数的作用是操作序列中的所有元素,并返回一个迭代器,迭代器要转成列表才能得到最终的值
lambda表达式可以专门配合高阶内置函数做简单实现
list1 = [1,2,3,4,5]
print(list(map(lambda x:x+1,list1)))
reduce()
reduce(func,seq)将每次函数计算的结果据需和序列的下一个元素做累计计算,最终结果只有一个值。
from functools import reduce
list1 = [1,2,3,4,5]
def f(a,b):
print('进入f')
print('a=',a)
print('b=',b)
return a*b
res = reduce(f,list1)
print(res)
from functools import reduce
list1 = [2,6,8,2,1,3]
print(reduce(lambda a,b:a*b,list1))
- reduce就是平常遇见累加,累积都可以用,当然累积不一定用reduce
- reduce返回就是一个值
- reduce需要导入from functools import reduce
filter() 过滤掉不需要的数据
filter(func,seq) 结果可以通过list转换
保留序列中所有的偶数
list1 = [1,2,3,4,5,6,7,8,9,10]
for i in list1:
if i % 2 != 0:
list1.remove(i)
print(list1)
list1 = [1,2,3,4,5,6,7,8,9,10]
def os(x):
return x % 2 == 0
print(list(filter(os,list1)))
print(list(filter(lambda x:x%2==0,list1)))
sorted()排序
list1 = [2,4,1,5,3,4,86,31,5453,4,1,135]
print(sorted(list1))
print(sorted(list1,reverse=True)) #reverse=True是反转的意思
递归函数
如果一个函数的内部自己调用了自己,就叫递归
内存溢出
- 如果要定义递归函数,不想让他报错,必须要有出口
- 不断向出口接近
打印1-500
def func(x):
if x == 501:
return
print(x)
return func(x+1)