day11-python基础
Posted changwentao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day11-python基础相关的知识,希望对你有一定的参考价值。
day11
2.2.1. 返回的None则不是闭包,返回的是cell....则是闭包 3
2.3.1. 当执行一个函数时,如果解释器判断此函数内部闭包存在,Python有一个机制,闭包的所在的临时名称空间不会随着函数的执行完毕而消失。 3
3.1.1. 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。 4
3.1.2. 装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。 4
-
函数名的应用(第一对象)
-
1,直接打印函数名得到的是函数的内存地址
-
2,函数名可以赋值运算
-
3,函数名可以作为函数的参数
-
4,函数名可以作为容器类数据类型的元素
-
函数名可以当做函数的返回值
-
-
闭包
-
内层函数对外层函数非全局变量的引用就叫闭包
-
判断是闭包函数名.__closure__
-
返回的None则不是闭包,返回的是cell....则是闭包
-
闭包有什么用?
-
当执行一个函数时,如果解释器判断此函数内部闭包存在,Python有一个机制,闭包的所在的临时名称空间不会随着函数的执行完毕而消失。
-
-
装饰器
-
定义及应用
-
装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。
-
装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。
-
从简入繁
-
初级装饰器
import time
def func1():
print(‘in func1‘)
def timer(func):
def inner():
start = time.time()
func()
print(time.time() - start)
return inner
func1 = timer(func1)
func1()
装饰器---简单版
-
语法糖
import time
def timer(func):
def inner():
start = time.time()
func()
print(time.time() - start)
return inner
@timer #==> func1 = timer(func1)
def func1():
print(‘in func1‘)
func1()
装饰器---语法糖
-
带参数的装饰器
def timer(func):
def inner(a):
start = time.time()
func(a)
print(time.time() - start)
return inner
@timer
def func1(a):
print(a)
func1(1)
装饰器——带参数的装饰器
-
hold住所有参数的装饰器
import time
def timer(func):
def inner(*args,**kwargs):
start = time.time()
re = func(*args,**kwargs)
print(time.time() - start)
return re
return inner
@timer #==> func1 = timer(func1)
def func1(a,b):
print(‘in func1‘)
@timer #==> func2 = timer(func2)
def func2(a):
print(‘in func2 and get a:%s‘%(a))
return ‘fun2 over‘
func1(‘aaaaaa‘,‘bbbbbb‘)
print(func2(‘aaaaaa‘))
装饰器---hold住所有参数的装饰器
-
以上是关于day11-python基础的主要内容,如果未能解决你的问题,请参考以下文章