高阶函数代码形式:(1.函数接收的参数是一个函数名 2.函数的返回值是一个函数名)
def too():
print('from too') #高阶函数
def foo():
print('from foo')
return too
a = foo()
a()
def too():
print('from too')
def foo(func):
print('from foo')
func()
a = foo(too)
函数嵌套 定义一个函数,在该函数的代码块中在定义函数(可以一直定义下去)
def foo():
print('from in foo')
def too():
print('from in too')
return too
too = foo()
too()
闭包,将变量(函数本身也是一种变量)用函数封装起来
def foo():
def woo():
print('闭包')
return woo
woo = foo()
woo()
装饰器:
什么是装饰器. 装饰器是一个函数(具有高阶函数,嵌套函数,闭包等的特性),
作用:装饰器就是装饰函数的,及给函数添加功能
原则:1.不改变被装饰的函数的内部代码 2.不改变被装饰函数的调用方式
例如:给一个函数加一个测试函数调用时间的装饰器
import time
def foo(func):
def woo(*args,**kwargs):
a = time.time() #定义了一个具有计算函数运行时间的装饰器
res = func(*args,**kwargs)
b = time.time()
print(b - a)
return res
return woo
语法规定,@foo等同与two = foo(two).作用是在给不同的函数加装饰器时,只要在函数的前
面加上@装饰器的函数名就可以了.不需要给函数添加功能的就不需要加.(同时,还可以给函数加多个装饰器)
运行加了装饰器的函数,实质上是在运行装饰器(把函数放在装饰器内部运行)
@foo
def two(name,age):
time.sleep(1)
print('我叫%s,今年%s岁'%(name,age))
return '不错'
#two = foo(two)
res1 = two('jiang','18')
print(res1)