闭包函数
'''
闭包函数是函数内部定义函数
构成条件
1 函数中嵌套一个函数
2 内存嵌套函数 对外部作用域有一个非全局变量的引用
3 外出函数的返回值是内层函数的函数名
作用
保证局部信息不被销毁 数据的安全性
应用
1 保存一些非全局变量 但是不易被销毁、改变的数据
2 装饰器
3 实现数据锁定
'''
# def outF():
# sum = 2 # 定一个非全局变量
# def inF(n):
# return sum+1
#
# #外出函数返回值是内层函数的函数名
# return inF
# def outer():
# n = 10
# def inner():
# n = 20
# print("in",n)
# print("ou",n)
# inner()
# outer()
# 闭包函数
def outer(m):
n = 10
def inner():
print("in",(n+m))
return inner
ot = outer(9)
# 调用
ot() #>>> in 19
def a(a):
def b():
nonlocal a # 给外层函数变量声明
a += 1
print(a)
return b
fn_a = a(20)
fn_a() #>>> 21
装饰器
'''
装饰器的功能
1 函数执行时间统计
2 可以用在框架的路由传参上
3 插入日志
4 事物处理
5 权限娇艳
6 缓存
'''
'''
装饰器的使用方法
1 先定一个装饰函数(帽子)
2 再定义一个业务函数(类)
3 把帽子带上
装饰器的语法糖用法:
@装饰器名称
@intro 相当于 hello = intro(eat) 为eat函数装饰并返回
'''
# 标准装饰器模版
def wrapper(func): # func 业务函数
def inner(*args,**kwargs):
res = func(*args,*kwargs)
return res
return inner
{/tabs-pane}
{tabs-pane label="使用装饰器(1)"}
# 装饰器
def logger(func):
def wrapper(*args):
print('我准备开始计算{}函数了'.format(func.__name__))
# 真正执行的业务函数
func(*args)
print("计算完类")
return wrapper
# 第一种方法
def add(x,y):
print("{} + {} = {}".format(x,y,x+y))
# 使用装饰器来装饰函数
# 把函数名add作为参数传入装饰器
fun = logger(add)
fun(1,2)
'''
>>>
我准备开始计算add函数了
1 + 2 = 3
计算完类
'''
{/tabs-pane}
{tabs-pane label="使用装饰器(2)"}
# 装饰器
def logger(func):
def wrapper(*args):
print('我准备开始计算{}函数了'.format(func.__name__))
# 真正执行的业务函数
func(*args)
print("计算完类")
return wrapper
# 第二种方法
# 使用语法糖
@logger
def add(x,y):
print("{} + {} = {}".format(x,y,x+y))
add(11,4)
'''
>>>
我准备开始计算add函数了
11 + 4 = 15
计算完类
'''
{/tabs-pane}
评论 (0)