首页 > 代码库 > python笔记20-装饰器、作用域

python笔记20-装饰器、作用域

函数的作用域
是就近原则,从里往外找,如果自己函数里有,就拿过来

如果自己的函数里面没有的话,就去它父级函数里面找,父亲用不了儿子的,儿子可以用父亲的
函数只有被调用才会执行
# name = ‘python‘
# def warpper():#1
# name=‘吴冰‘
# def deco():#2
# name =‘陈冬瓜‘
# def hhh():#3
# name = ‘张莹‘
# print(‘xxx%s‘%name)
# print(‘我在里面%s‘%name)
# hhh()
# deco()
# print(‘外面的name是%s‘%name)
# warpper()

装饰器
#1、函数里面也可以嵌套的定义一个函数
#2、高阶函数
#装饰器说白了就是函数嵌套+高阶函数
#装饰器的作用就是在不改变原有函数的调用方式,入参的情况下,给函数添加新功能
#偷偷摸摸的给函数加上新功能,但是不改变原来的函数
#常用模块
#什么是模块,模块其实就是一个python文件
import time,os,sys
def timer(func):
def deco(*args,**kwargs):
#*args,**kwargs用来接收传入函数的参数
start_time = time.time()
res = func(*args,**kwargs)#获取返回值
end_time = time.time()
print(‘runtime‘,end_time-start_time)
return res
return deco

@timer #run = timer(run)
def run():
# start_time = time.time()
print(‘run..‘)
time.sleep(2)
# end_time = time.time()
# print(‘runtime‘, end_time - start_time)
#run == deco,
@timer
def run2(name):
print(name)
time.sleep(0.5)
run2(‘niuhanyang‘)

#上面这个函数其实就是返回了一个函数名而已
#1、调用timer函数的时候,要传入一个方法名,
# timer函数在函数内部定义了一个函数叫做deco
#又在函数deco内部调用了timer里面传入的方法
#run保存的是deco,deco是一个函数,调用run就是调用deco

python笔记20-装饰器、作用域