小白初识Python——装饰器

本文详细介绍了Python装饰器,从装饰器的基本概念、装饰器的使用方法到深入探讨不同类型的装饰器,包括无参数无返回值、有参数、不定长参数和有返回值的函数装饰。此外,还讨论了多层装饰器和带参数的装饰器的实现,帮助读者深入理解Python装饰器的工作原理。
摘要由CSDN通过智能技术生成

装饰器

写在前面的话:
想要搞懂装饰器,多翻阅大神的博客,自己动手将代码实例化。
下面的代码都是随便取的名字,为了方便阅读,所以后面用了很多大白话。
感谢各位先行者提供的经验之谈,如果侵权请告知,再次致谢。

这句话很重要:python一切皆对象!

一、装饰器前言

装饰器Decorator)是一个装饰函数的函数,本质就是一个函数,用来在不修改被装饰函数的源代码与调用方式的前提下,对被装饰函数进行功能扩展的函数。掌握装饰器前需要学习以下4点知识:

  • 函数的本质就是一个指向函数本体的内存地址,执行函数的方法为函数名();
  • 闭包(closure)知识;
  • 开放封闭原则(OCP,Open Closed Principle):对扩展是开放的,而对修改是封闭的;
  • 函数的元组参数(*args)与字典参数(**kwargs)

二、装饰器初识

"""定义一个装饰器"""
def outer(func):
    def inner():
        print("这是中华人民共和国:", end="")
        func()
    return inner

@outer  # >>>  demo1 = outer(demo1)
def demo1(): #要被装饰的函数
    print("湖南省")
demo1()

👆👆👆👆代码中,outerinner组成的闭包函数构成了一个装饰器,对demo1函数进行装饰。这样就可以在不修改demo1的前提下,添加新的功能——打印“这是中华人民共和国:”这样一句话。

通过语法糖:@,如下:

@outer  # @outer ==> demo1 = outer(demo1)
def demo1():

不难看出,outer函数实际上被当做对象赋值给了demo1这个变量,此时的demo1等于是调用了outer(),由于outer函数的返回值是inner,间接调用了inner函数,而在inner函数内部存在下面一句代码,

func()  
"""
func是外部函数的参数,@将demo1作为实参返回给了outer函数的形参func
func() ==> demo1()  此时完成了对demo1的调用,实现了装饰demo1的功能
"""

demo1的代码功能实际上被内部函数所接收了,意味着装饰器成功的对demo1进行了修饰,完成了新功能的添加。

下面通过两幅图来进行说明:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值