python学习笔记之装饰器

2022/3/20 14:27:56

本文主要是介绍python学习笔记之装饰器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

python学习笔记之装饰器

昨日内容回顾

名称空间

名称空间就是存放变量名和变量值关系的地方

内置名称空间:python解释器自带函数的空间

全局名称空间:定义的变量名和函数名的空间

局部名称空间:函数体定义的变量名名的空间

存活时间

内置名称空间存活于python解释器使用时

全局名称空间存活于当前py文件中

局部名称空间存活于函数体代码运行时

名称空间中的查找顺序

局部空间——>全局空间——>内置空间

哪怕三个名称空间中都有相同的名字,依旧是按照这个顺序来查找的。

作用域

全局有效:内置名称空间、全局名称空间

局部有效:局部名称空间

名称空间相关关键字

global

局部名称修改全局空间中的不可变类型声明

nonlocal

局部名称修改局部名称声明

函数名的多种用法

  1. 函数名可以当做变量名赋值
  2. 函数名可以当做函数的实参
  3. 函数名可以当做函数的返回值
  4. 函数名可以当做容器类型的元素

函数的嵌套

函数内部定义单个或者多个函数的

0.0

今日学习内容

闭包函数

闭包函数的两大特征

  1. 闭:定义在函数内部的函数(嵌套)

  2. 包:内部函数使用了外层函数名称空间中的名字

    ​ 外部函数返回值为内部函数的函数名

闭包函数的实际应用

闭包函数也可以给函数体传参

内部函数空间中找不到变量名绑定关系时,会在外部函数空间中找

 def a():
    munber = 1
    def b():
        print(munber)
      
b函数在当前空间中找不到munber的值,便会向外部空间中找。

装饰器简介

装饰器需要运用到这几天所学的所有函数知识点

装饰器的本质:

​ 在不改变被装饰对象原有的调用方式和内部代码的情况下,给被装饰的对象加上新的单个或多个功能。

装饰器原则:

​ 对扩展开放:开放并可增加扩展功能

​ 对修改封闭:封闭主体代码并修改额外功能

时间模块

import time  # 调用时间模块
time.time  # 获取当前时间戳
time.sleep  # 睡眠设定时间后才继续运行

装饰器原理解析

装饰器

装饰器模板

编写装饰器有一套固定的模板格式


def 装饰器函数名(实际功能函数名)
	def 封包函数名(*arg,**kwargs)
	执行实际功能函数前,需要的额外的功能
    变量名 = 实际函数功能名(*arg,**kwargs)
    执行完实际功能函数后,需要的额外功能
    return 变量名
return 封包函数名

0

装饰器语法糖

作用:让代码写的更简洁
如:
先创建一个装饰器
def 装饰器函数名(实际功能函数名)
	def 封包函数名(*arg,**kwargs)
	执行实际功能函数前,需要的额外的功能
    变量名 = 实际函数功能名(*arg,**kwargs)
    执行完实际功能函数后,需要的额外功能
    return 变量名
return 封包函数名

实际使用装饰器

实际功能函数名 = 装饰器函数名(实际函数功能名)

等价于
@装饰器函数名
实际功能函数名()

使用语法糖 同样也要知道语法糖的实际意义是什么。

装饰器修复技术

from functools import wraps  
def f1(func):
    @wraps(func)
    def f2():
        func()
    return f2

@f1
def f3():
    pass

print(f3.__name__)

就是使 实际功能函数的参数指向,保持原本的函数名
不影响代码使用,暂时这个阶段感觉不到有啥用。。。

..

本周小结

这个星期学习的知识点很多,把装饰器弄明白还是很有成就感的。



这篇关于python学习笔记之装饰器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程