61.基础语法-函数式编程
匿名函数
s = lambda x,y,z: x*100 + y*12 + z
print(s(1, 2, 3))
print(lambda(x,y,z: x*100 + y*12 + z)(1,2,3))
高阶函数
- 把函数作为参数使用的函数
def A(i):
return i*100
def B(i):
return i*2
print(B(A(1)))
def C(i, a):
return a(i) * 10
print(C(1,A))
系统的高阶函数
map() 映射
- 把一个列表或集合,每一个都按照一定的规则操作后,生成一个新的列表或集合
- 返回一个可迭代的类型,此类型就必须用迭代表示
def M(i):
return i *8
l0 = [1,2,3,4,5]
l1 = [11,12,13,14,15]
l2 = {21,22,23,24,25}
print(list(map(M, l0)))
print(set(map(M, l1)))
print(list(map(lambda i : i * 100, l0)))
print(list(map(lambda i,n : i *100 + n, l0,l1)))
for i in map(lambda i,n : i * 100 +n, l0, l1):
print(i)
print([i for i in map(lambda i: i *100, l0)])
zip()
- 把两个可迭代的内容,生成一个元组元素类型组成的可迭代的内容
l1 = [1,2,3,4]
l2 = [11,22,33,44]
print(list(zip(l1, l2)))
enumerate()
- 给可迭代的内容,自动添加一个索引,形成一个元组元素类型组成的可迭代的内容
- 参数start:从多少开始
l0 = ["er", "to", "d"]
print(list(enumerate(l0, start=100)))
reduce() 归并,缩减
- 把一个可迭代对象,按照一定的规则,合并成一个结果
from functools import reduce
def R(x,y):
return x+y
print(reduce(R, [i for i in range(10)]))
print(reduce(R, range(10)))
filter()
- 对一组数据进行过滤,返回符合条件数据组成的列表
def Fi(a):
return a % 2 == 0
print(list(filter(Fi, [2,6,8,3,9,10,3])))
sorted()
- 把一个序列按照给定的规则进行排序,生成新序列
l = [23,546,767,878,6556,7688,1,34,5]
print(l)
print(sorted(l))
print(sorted(l, reverse=True)) #reverse控制正序和倒叙,默认为由低到高正序
print(sorted(l, key=abs)) #key是规则
返回函数
- 返回值为函数的函数
def Fan0():
def Fan1():
print("函数1")
return Fan1
f2 = Fan0()
print(type(f2))
print(f2)
闭包
-
一个函数在内部定义函数,内部函数应用外部函数的参数或局部变量,当内部函数被当作返回值时相关参数和变量保存在返回的函数中,这种结果叫做 闭包。
-
大坑::::返回闭包时,返回函数不能引用任何循环变量
-
解决方式:::用函数替代循环变量
#此代码为正常代码
#解决问题后的代码
def Bi0(*args):
def Bi1():
n = 0
for i in args:
n += i
return n
return Bi1
b = Bi0(0,1,2,3,4,5,6,7,8,9)
print(b())
装饰器(魔法糖)
- 不改变函数代码的基础上,无限制的扩展功能的一种机制
- 本质:是一个返回函数
#def 函数名(arg, *args, **kwargs)
#args单个参数
#*args参数打包成元组给函数调用
#**kwargs参数打包成字典给参数调用
#def 函数名(1,2,3,4,a=5,b=6)相当于
#args接了一个1
#*args接了一个元组(2,3,4)
#**kwargs接了一个字典{"a":5, "b":6}
def ZS0(Func):
def ZS1(*args, **kwargs):
print("前装饰")
Func(*args, **kwargs)
print("后装饰")
return Func
return ZS1
@ZS0 #魔法糖:相当于把下面的函数,以参数的形式,传入相应的闭包,进行修饰
def H():
print("-------")
H()
偏函数
- 改变函数的一些默认参数,并固定,以方便使用,这样的参数就叫做偏函数
import functools
#形成一个新函数int0,把int函数赋值给他,并把默认参数base的值从原来的10改为16后固定
int0 = functools.partial(int, base=16)
print(int0("10"))