七、函数下

雨燕双飞 提交于 2019-12-01 02:01:28

函数式编程

  • 在python中,函数是一等对象

  • 一等对象一般都会具有如下特点:

    1. 对象是在运行时创建的

    2. 能赋值给变量或作为数据结构中的元素

    3. 能作为参数传递

    4. 能作为返回值返回

  • 高阶函数

    • 高阶函数至少要符合以下两个特点中的一个

      • 接受一个或多个函数作为参数

      • 将函数作为返回值返回

    • 接受函数作为参数,或者将函数作为返回值得函数是高阶函数

      #定义一个函数#可以将制定列表中的所有的偶数,保存到一个新的列表中返回def fn(list):    new_list = []    for i in list:        if i % 2 == 0:            new_list.append(i)    return new_list

       

1.fulter()

fulter() 可以从序列中过滤出符合条件的元素,保存到一个新的序列中

参数:

  1. 函数,根据该函数来过滤序列(可迭代的结构)

  2. 需要过滤的序列(可迭代结构)

返回值

过滤后的新序列(可迭代结构)

2.lambda 函数表达式 匿名函数

lambda函数表达式专门来创建一些简单地函数,他是函数创建的又一种方式

语法:lambda 参数列表:返回值

匿名函数一般都是作为参数使用,其他部分一般不会使用

 

3.sort()

  1. 该方法用来对列表中的元素进行排序

  2. sort()方法默认是直接比较列表中的元素大小

  3. 在sort()可以接收一个关键字参数,key

  4. key需要一个函数作为参数,当谁知了函数作为参数

  5. 每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素的大小

    l = [2,3,4,1,6,5]l.sort()print(l)

     

4.sorted()

这个函数和sort()的用法基本一致,但是sorted()可以对任意的序列进行排序,并且使用sorted()排序不会影响原来的对象,而是返回一个新对象

5.闭包

将函数作为返回值返回,也是一种高阶函数,这种高阶函数我们也成为闭包,通过闭包可以创建一些只有当前函数能访问的变量,

作用:可以将一些私有的数据藏到闭包中

形成函数的要件

  1. 函数嵌套

  2. 将内部函数作为返回值返回

  3. 内部函数必须要使用到外部的变量

def fn():    a = 10    #函数内部在定义一个函数    def inner():        print('我是fn2',a)    #将内部函数 innner作为返回值返回    return inner#r是一个函数,是调用fn()后返回的函数#这个函数是在fn()内部定义,并不是全局函数#所以这个函数总是能访问到fn()函数内的变量r = fn()​    # 求多个数的平均值    # print(sum(sum)/len(sum))​def make_avg():    nums = []​    def avg(n):        nums.append(n)        return sum(nums)/len(nums)    return avgavg = make_avg()print(avg(10))print(avg(30))

6.装饰器

通过直接修改代码的方式来完成某个需求,会产生一下某些问题

  1. 如果要修改的函数过多,修改起来会比较麻烦

  2. 不方便后期维护

  3. 这样做会违反开闭原则(ocp)

    开闭原则:程序的设计,要求开发对程序的扩展,要关闭对程序的修改

 

 

像begin_end()这种函数我们称它为装饰器

  • 通过装饰器,可以再不修改原来函数的情况下来对函数进行扩展

  • 在开发中,我们都是通过装饰器来扩展函数功能的‘

在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数。同时可以为一个函数指定多个装饰器,这样的函数将会安装从内到外的方式进行装饰

def begin_end(old):    '''    用来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束    参数:        old 要扩展的函数对象    '''#创建一个新函数    def new_function(*args,**kwargs):        print('开始执行---')        #调用被扩展的函数        result = old(*args,**kwargs)        print('执行结束---')        #返回执行的结果        return result​    #返回新函数    return new_function@begin_end    #越靠近def hello的再靠内def hello():    print('你好')hello()

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!