七函数下
Posted wn-888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七函数下相关的知识,希望对你有一定的参考价值。
函数式编程
-
在python中,函数是一等对象
-
一等对象一般都会具有如下特点:
-
对象是在运行时创建的
-
能赋值给变量或作为数据结构中的元素
-
能作为参数传递
-
能作为返回值返回
-
-
高阶函数
-
高阶函数至少要符合以下两个特点中的一个
-
接受一个或多个函数作为参数
-
将函数作为返回值返回
-
-
接受函数作为参数,或者将函数作为返回值得函数是高阶函数
#定义一个函数
#可以将制定列表中的所有的偶数,保存到一个新的列表中返回
def fn(list):
new_list = []
for i in list:
if i % 2 == 0:
new_list.append(i)
return new_list
-
1.fulter()
fulter() 可以从序列中过滤出符合条件的元素,保存到一个新的序列中
参数:
-
函数,根据该函数来过滤序列(可迭代的结构)
-
需要过滤的序列(可迭代结构)
返回值
过滤后的新序列(可迭代结构)
2.lambda 函数表达式 匿名函数
lambda函数表达式专门来创建一些简单地函数,他是函数创建的又一种方式
语法:lambda 参数列表:返回值
匿名函数一般都是作为参数使用,其他部分一般不会使用
3.sort()
-
该方法用来对列表中的元素进行排序
-
sort()方法默认是直接比较列表中的元素大小
-
在sort()可以接收一个关键字参数,key
-
key需要一个函数作为参数,当谁知了函数作为参数
-
每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素的大小
l = [2,3,4,1,6,5]
l.sort()
print(l)
4.sorted()
这个函数和sort()的用法基本一致,但是sorted()可以对任意的序列进行排序,并且使用sorted()排序不会影响原来的对象,而是返回一个新对象
5.闭包
将函数作为返回值返回,也是一种高阶函数,这种高阶函数我们也成为闭包,通过闭包可以创建一些只有当前函数能访问的变量,
作用:可以将一些私有的数据藏到闭包中
形成函数的要件
-
函数嵌套
-
将内部函数作为返回值返回
-
内部函数必须要使用到外部的变量
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.装饰器
通过直接修改代码的方式来完成某个需求,会产生一下某些问题
-
如果要修改的函数过多,修改起来会比较麻烦
-
不方便后期维护
-
这样做会违反开闭原则(ocp)
开闭原则:程序的设计,要求开发对程序的扩展,要关闭对程序的修改
像begin_end()这种函数我们称它为装饰器
-
通过装饰器,可以再不修改原来函数的情况下来对函数进行扩展
-
在开发中,我们都是通过装饰器来扩展函数功能的‘
在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数。同时可以为一个函数指定多个装饰器,这样的函数将会安装从内到外的方式进行装饰
def begin_end(old):
‘‘‘
用来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束
参数:
old 要扩展的函数对象
‘‘‘
#创建一个新函数
def new_function(*args,**kwargs):
print(‘开始执行---‘)
#调用被扩展的函数
result = old(*args,**kwargs)
print(‘执行结束---‘)
#返回执行的结果
return result
?
#返回新函数
return new_function
以上是关于七函数下的主要内容,如果未能解决你的问题,请参考以下文章