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"))
posted @ 2020-02-22 18:28  TK_tank  阅读(105)  评论(0编辑  收藏  举报