1.闭包
闭包:如果在一个内部函数里,对在外作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包。
闭包符合2个条件的函数
闭包 = 内部函数 + 定义函数时的环境
def fn():
x = 10 #外部变量
def g(): #内部函数
print('x=', x)
return g
s = fn()
s()
x=10
2.装饰器
2.1 无参
time.time() 拿到此时此刻的时间
时间戳:表示某一刻的时间,是指1970年01月01日00时00分00秒起到现在的总秒数,能够唯一的表示一个时间。
开放封闭原则
封闭:如果已经实现了某个功能,还想再加别的功能,不允许在动原函数
开放:装饰器:装饰就是添加一个新的功能,为你之前的某个函数添加新的功能
import time
def show_time(func): # 功能就是帮忙展示时间的
def inner():
start = time.time()
func() # 扩展的原函数
end = time.time()
print(f"运行了{end - start}秒")
return inner
@show_time # fn = show_time(fn)
def fn():
print('fn...')
fn()
fn...
运行了0.0秒
python提供了一个简单的写法
通过一个 @ 语法糖
2.2 有参
import time
def show_time(func): # 装饰器里面func就是扩展的原函数
def inner(*args,**kwargs): # 可以接收一切参数(位置参数,关键字参数)
start = time.time()
res = func(*args, **kwargs)
end = time.time()
print(f"运行了{end - start}秒")
return res
return inner
@show_time
def fn():
print('fn...')
fn()
@show_time
def jc(*args):
j=1
for i in args:
j*=i
print(j)
jc(4,5)
@show_time
def jc(*kwargs):
j=1
for i in kwargs:
j*=i
print(j)
jc(4,5,7)
fn...
运行了0.0秒
20
运行了0.0秒
140
运行了0.0秒