函数的装饰器

Posted on 2018-11-28 20:41  大白不白  阅读(93)  评论(0编辑  收藏  举报

在面向对象编程中,一切皆对象
具体的体现
  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))
如此方式 违反了一个设计原则 开闭原则
指的是 对扩展开放 对修改封闭 可以添加新功能,但是不能修改源代码和调用方式
装饰器和闭包函数的关系
装饰器是一种设计代码的套路,在不修改源代码和调用方式的情况下添加功能
要完成装饰器就需要使用闭包函数

 

Copyright © 2024 大白不白
Powered by .NET 8.0 on Kubernetes