函数和装饰器
1、名称空间,作用域,取值顺序等
名称空间:当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系,随着函数的执行完毕,临时空间自动关闭。<br />作用域:是程序在执行过程中变量与值得起作用范围<br />取值顺序:对于变量和值最先起作用是函数内,然后是全局,最后是内置
2、函数的嵌套
在程序执行中,开始只会把函数名放到内存中 ,函数在调用的时候才执行。
代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。
3、内置函数global(),nonlocal()
print(globals()) # 全局名称空间:所有变量
print(locals()) # 局部名称空间:所有变量
a = b = def func1(): c = d = print(globals()) # 全局变量放在一个字典中 return locals() # {'c': , 'd': } print(func1())
4、关键字global,nonlocal
global:在局部空间内改变一个全局变量
nonlocal:在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。
5、函数名的应用
函数名是函数的名字,本质:变量,特殊的变量。
5.1、单独打印函数名
def func1(): print() print(func1) # <function func1 at 0x0000000000872378> a = print(a)
5.2、函数名的赋值
def func2(): print() f = func2 print(f())
5.3、函数名可以作为容器类数据的元素
l1 = [] for i in range(1,5): l1.append('f'+str(i)) print(l1)
5.4函数名可以作为参数
a = def f1(x): print(x) f1(a)
5.5、函数名可以作为函数的返回值。
def wraaper(): def inner(): print() inner() wraaper()
6、闭包
闭包:就是内层函数对外层函数(非全局)变量的引用。
如何判断 内层函数名.__closure__ cell 就是=闭包
name = '老男孩' def wraaper2(n): # n = '老男孩' 相当于 def inner(): print(n) inner() print(inner.__clo
7、装饰器初识
7.1测是一个函数执行时间(直接加函数中)
def func1(): print('你有病呀,领导,测试我的执行效率干甚。') print(time.time()) # 时间戳 start_time = time.time() func1() time.sleep(0.3) end_time = time.time() print('此函数的执行效率%s' % (end_time - start_time))
7.2测是一个函数执行时间(写成函数)
def func1(): print('你有病呀,领导,测试我的执行效率干甚。') def func2(): print('你有病呀,领导2,测试我的执行效率干甚。') func1() def func1(): print('你有病呀,领导,测试我的执行效率干甚。') func1() def timmer(f): start_time = time.time() f() time.sleep(0.3) end_time = time.time() print('此函数的执行效率%s' % (end_time - start_time))
7.3测是一个函数执行时间(使用装饰器)
f1 = func1 # f1 = func1 func1 = timmer # 新变量func1 = timmer func1(f1) def func2(): print('你有病呀,领导,测试我的执行效率干甚。') def timmer(f): # f = func1 def inner(): start_time = time.time() f() # func1() time.sleep(0.3) end_time = time.time() print('此函数的执行效率%s' % (end_time - start_time)) return inner # 语法糖@ @timmer # func1 = timmer(func1) def func1(): print('你有病呀,领导,测试我的执行效率干甚。') func1 = timmer(func1) # inner func1() # inner()
7.4测是一个函数执行时间(优化装饰器)
def timmer(f): # f = func1 函数名 def inner(*args,**kwargs): start_time = time.time() f(*args,**kwargs) time.sleep(0.3) end_time = time.time() print('此函数的执行效率%s' % (end_time - start_time)) return inner @timmer # func1 = timmer(func1) # inner def func1(a,b): print(a,b) print('你有病呀,领导,测试我的执行效率干甚。') @timmer def func2(a,b,c,d): print(a,b,c,d) print('你有病呀,领导,测试我的执行效率干甚。') func1(1,2) # inner() func2(2,3,4,5) def timmer(f): # f = func1 函数名 def inner(*args,**kwargs): start_time = time.time() ret = f(*args,**kwargs) time.sleep(0.3) end_time = time.time() print('此函数的执行效率%s' % (end_time - start_time)) return ret return inner @timmer # func1 = timmer(func1) # inner def func1(a,b): print(a,b) print('你有病呀,领导,测试我的执行效率干甚。') return 666 print('************',func1(1,2))
相关推荐
firefaith 2020-10-30
Erick 2020-11-17
xuebingnan 2020-11-05
Android开发CXY 2020-11-11
拉斯厄尔高福 2020-11-04
小飞侠V 2020-11-02
yutian0 2020-10-26
牧 2020-10-22
佐杰 2020-10-22
文山羊 2020-10-20
积少成多 2020-10-21
yuwinter 2020-10-14
Mars的自语 2020-09-27
Radar 2020-09-26
楼上小宇home 2020-09-26
Mynamezhuang 2020-09-18
归去来兮 2020-09-18
ltd00 2020-09-12
libao 2020-09-16