标签:toc 装饰器 内部函数 因此 python list title imp amp
函数的对象:就是可以将定义在函数内的函数返回到全局使用,从而打破函数的层级限制。
名称空间与作用域:作用域的关系在函数定义阶段就已经固定死了,与函数的调用位置无关,即在任意位置调用函数都需要在函数定义时找到作用域的关系。
def f1():
x = 13
def func():
print(x)
return func
f = f1()
x = 2
def f2():
x = 14
f()
f2()
# 13
def outter():
x = 999
def inner():
print(x)
return inner
f = outter() # f 就是 inner 函数的内存地址
def func():
x = 666
f()
func()
# 999
def func(x,y): # 位置形参
print(x)
print(y)
func(1,2)
func(3,4) # 位置实参,一一对应
# 1 2
# 3 4
def outter(func):
# func = 123456
def inner():
print(func)
return inner
f = outter(123456) # f = inner
f() # inner()
# 123456
器指的就是工具。而程序中的函数就是具备某一功能的工具,所以装饰器就是指 为被装饰器对象添加新的功能。因此定义装饰器就是定义一个函数,只不过该函数的功能是用来为其他函数添加额外功能的。
开发:对扩展开发
封闭:对修改封闭
1:不修改被装饰对象的源代码
2:不修改被装饰对象的调用方式
统计函数运行时间
# 不使用装饰器
import time
def func():
time.sleep(1)
print('计算函数运行时间!')
start = time.time()
func()
end = time.time()
result = end - start
print(f'func 函数的运行时间为{result}')
# 计算函数运行时间!
# func 函数的运行时间为1.0007097721099854
# 简易版装饰器
import time
def func():
time.sleep(1)
print('计算函数运行时间!')
def outter(a):
def inner():
start = time.time()
a()
end = time.time()
result = end - start
print(f'func 函数的运行时间为{result}')
return inner
func = outter(func)
func()
# 升级版装饰器
import time
def func():
time.sleep(1)
print('计算函数运行时间!')
return 'func'
def login(name):
time.sleep(2)
print(f'就打印这个名{name}')
return 'login'
def outter(a):
def inner(*args,**kwargs):
start = time.time()
res = a(*args,**kwargs)
end = time.time()
print('func 函数的运行时间为%s'%{end - start})
return res
return inner
func = outter(func)
func()
login = outter(login)
login('jin')
import time
def outter(a):
def inner(*args,**kwargs):
start = time.time()
res = a(*args,**kwargs)
end = time.time()
print('函数的运行时间为%s'%{end - start})
return res
return inner
@outter
def func():
time.sleep(1)
print('计算函数运行时间!')
return 'func'
func()
@outter
def login(name):
time.sleep(2)
print(f'******{name}******')
return 'login'
login('鸡哥')
标签:toc 装饰器 内部函数 因此 python list title imp amp
原文地址:https://www.cnblogs.com/jincoco/p/11184603.html