一、闭包函数
定义:应该满足以下两个条件。
1.定义在函数内部的函数
2.内部函数引用了外部函数名称空间作用域的名字
样式:
def outer(): y = 222 def inner(): print(x,y) return inner
# 函数在定义阶段名字的查找顺序已经固定死了,不会因为函数调用位置的变化而变化
给函数传参的两种方式
1.直接传参(函数名加参数)
def index(username):
print(username)
2.闭包
可以读取其他函数代码的内部 ,可以快速修改代码
def outter(x,y): x = 1 y=40 def my_max(): if x>y: return x return y return my_max res = outter(1,40)
二 装饰器
给被装饰对象添加新的功能的一个工具
装饰器(可调用对象)必须遵循的两个原则
不改变被装饰对象的源代码
不改变被装饰对象的调用方式
开放封闭原则
开放:对扩展开放
封闭:对修改封闭
import time模块
time.time 时间戳 距离1970年1-1 00:00:00相差的秒数
time.sleep 让程序延续多少秒执行
无参装饰器
from functools import wraps def outter(func): @wraps(func) def inner(*args,**kwargs): # * **在形参中使用 # 执行被装饰函数之前你可以做的操作 res = func(*args,**kwargs) # * **在实参中使用 # 执行被装饰函数之后你可以做到操作 return res return inner
@outter
有参装饰器
def wrappers(params1,params2,params3): def outter(func): @wraps(func) def inner(*args,**kwargs) print("执行被装饰函数之前 你可以做的操作") res = func(*args,**kwargs) print("执行被装饰函数之后 你可以做的操作") return res return inner return outter @wrappers(1,2,3)