赞
踩
把函数作为参数 或 把函数作为返回值 的函数就是高阶函数
示例1:
def fn1(f):
if f %2 == 0:
print(f,'这是一个偶数')
elif f %2 != 0:
print(f,'这是一个奇数')
return ''
def fn2(a,b):
return a ** b
fn1(fn2(5,5))
>> 3125 这是一个奇数
示例1:
def fn1():
def fn2(a,b):
return a+b
return fn2
r = math()
print(r(2,3))
>> 5
语法:lambda 表达式
用于表达一些比较简单的函数
匿名的好处就是只会运行一次,运行结束后会在内存中消失
示例1:
r = (lambda a,b: a+b)(10,20)
print(r)
>> 30
闭包也是高阶函数的一种
形成闭包的条件:1、函数嵌套
2、内部函数被当作返回值
3、内部函数要使用到外部函数的变量闭包的作用:
自定义一些只有当前函数能够访问的变量(不被全局访问,只能在函数内部进行访问)
可以把一些重要的数据放进闭包
示例1:
def fn1():
r = 0
def fn2(a,b): # 函数嵌套
r = a ** b # 使用到外部的变量
return r
return fn2 # 以内部函数作为返回值
d = fn1()
print(d(2,5))
>> 32
为什么要装饰器:
在函数过多的时候,
1、修改麻烦,耗费时间
2、不方便后期的维护
3、违反ocp原则(开闭原则)开闭原则:
开放对程序的扩展,关闭对程序的修改
装饰器:
通过定义一个函数对其他函数进行扩展的函数 ( 对一个函数进行包装 )
通过装饰器可以在不修改原来的函数的情况下对函数进行扩展
在函数前面用 @ 列出装饰器
示例1: @装饰器名字 def fn1(): pass 示例2: def fn(func): #定义一个装饰器,增加打印的输出 def fn1(): print('执行开始') func() print('执行结束') return fn1 @fn # 对fnu1进行扩展 def fnu1(): print('hello world') @fn # 对fnu2进行扩展 def fnu2(): print('hello Python') fnu1() fnu2() >> 执行开始 >> hello world >> 执行结束 >> 执行开始 >> hello Python >> 执行结束
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。