函数的装饰器
Posted xuezhihao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的装饰器相关的知识,希望对你有一定的参考价值。
在面向对象编程中,一切皆对象
具体的体现
1.函数可以被引用
2.函数可以作为函数的参数
3.函数可以作为函数的返回值
4.可以被存储到容器类型中
函数嵌套
嵌套调用 在函数中调用了另一个函数
嵌套定义 在一个函数中定义了另一个函数
定义在函数内的函数,只能在函数内使用,外界不能访问
名称空间
存储名称的空间
专门存储名字和内存地址的关系的空间
分类:
内置名称空间
存储解释器自带的一些名称与值的对应关系(python解释器启东时创建,所有代码执行完毕,关闭解释器销毁)
print len max min
全局名称空间(执行py文件创建全局空间,文件代码全部执行)
文件级别的名称,只要你的名字定义是顶着最左边写的就在全局空间
除了内置的函数内的,都在全局中
局部名称空间
只要是函数内的名称就是局部的
(调用函数时创建,执行完毕就销毁)
名称空间加载顺序
内置》》》全局》》》局部
名称的查找顺序
局部》》》全局》》》内置
作用域
全局的名称空间和内置的名称空间,在使用上没什么区别
全局和内置可以划分为同一个范围
global表示全局范围,就是全局作用域
局部的单独划分为一个范围
local局部作用域
查看全局作用域内容
globals(
查看局部作用域内容
locals()
闭包函数
1.定义在另一个函数中
2.在这个内部的函数中使用了外部的名称
# def fun1():
# age = 10
# def inner():
# print("hello")
# print(age)
在返回这个内部的函数时,不是单纯的返回函数,还把函数中访问到的局部名称一起打包了
相当于将内部函数与访问的数据打包在一起了
# return inner
函数的作用域在定义时就固定了,与调用的位置没有关系
闭包函数的模板
def func2():
a=1
b=10
def inner():
print(a)
print(b)
return inner
f=func2()
print(f.__closure__[0].cell_contents)
print(f.__closure__[1].cell_contents)
装饰器
给一个已有的对象添加新的功能
增强功能
简单的说:装饰器就是一个用于给其他函数增加功能的函数
import time
print(time.time())指从1970年1月1日0点0分(Unix元年)到现在一共经过的秒数
mac是Linux内核,Linux是unix的一个分支
start_time=time.time()
download()
end_time=time.time()
print("下载耗时",(end_time-start_time))
如此方式 违反了一个设计原则 开闭原则
指的是 对扩展开放 对修改封闭 可以添加新功能,但是不能修改源代码和调用方式
装饰器和闭包函数的关系
装饰器是一种设计代码的套路,在不修改源代码和调用方式的情况下添加功能
要完成装饰器就需要使用闭包函数
以上是关于函数的装饰器的主要内容,如果未能解决你的问题,请参考以下文章