# 闭包
def outer(x):
print('outer:',x)
def inner():
print('inner:', x)
return inner # 外部函数return的一定是内部函数的函数名
def a(x):
print('a:',x)
def b(y):
print('b:', y)
print('x+y:', x + y)
return x+y
return b # 外部函数return的一定是内部函数的函数名
if __name__ == '__main__':
# 闭包函数的调用
# 1.首先调用外函数,获得内函数的函数名 函数名=outer(3)
# 2.然后使用获得的函数名进行内函数的调用 函数名()
fun_name = outer(2)
fun_name()
# 简写
outer(3)()
a = a(1)(2)
print('哈哈哈哈:',a)
# 装饰器讲解
# 装饰器的作用:在不改变原来函数执行的情况下,为这个函数做一些其他的事情/添加一些其他的事情
# 一个函数可以添加多个装饰器
# 闭包
def fun_outer1(func):
def inner(*args, **kwargs): # *args, **kwargs 其实就是func的参数
print('你想做的事情1')
return func(*args, **kwargs)
return inner # 外部函数return的一定是内部函数的函数名
def fun_outer2(func):
def inner(*args, **kwargs):
print('你想做的事情2')
return func(*args, **kwargs)
return inner
@fun_outer1 # 闭包可以作为一个装饰器 @+函数名
@fun_outer2
def aa(a):
print('我的函数原本要做的事情..........')
if __name__ == '__main__':
aa(6)
aa(a=1)
# 练习
import time
# 写日志的装饰器
def write_log(func):
def inner(*args,**kwargs):
result = func(*args,**kwargs)
if result:
with open('a.log','w') as file:
file.write(str(result))
return inner
# 计算函数执行时间的装饰器
def cost_time(func):
def inner(*args,**kwargs):
start =time.time()
func(*args,**kwargs)
end = time.time()
print('函数执行时间:',end -start)
return inner
@cost_time
@write_log
def sum_int(n):
sum = 0
for i in range(n+1):
sum = sum + i
# print('sum:',sum)
return sum
sum_int(1000)