七、函数下

函数式编程

  • 在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 avg
avg = 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()

 

猜你喜欢

转载自www.cnblogs.com/wn-888/p/11647170.html