美文网首页
跟老奶奶说装饰器

跟老奶奶说装饰器

作者: Rooooooooong | 来源:发表于2018-10-22 22:15 被阅读0次

本文将用通俗易懂的方式阐述装饰器,欢迎指正~

1.没有装饰器以前,代码冗余

def deposit():
    print("存款中...")
    
def withdrawl():
    print("取款中...")
    
def check_password(func):
    print("密码验证中...")
    func()
    
button = 1
if button ==1:
    check_password(deposit)
else:
    check_password(withdrawl)
>>>
密码验证中...
存款中...

2. 装饰器出厂

def check_password(func):
    def deco():
        print("密码验证中...")
        func()
    return deco

@check_password
def deposit():
    print("存款中...")
    
def withdrawl():
    print("取款中...")
deposit()
>>>
密码验证中...
存款中...
withdrawl()
>>>
存款中...
w = check_password(withdrawl)
w()
>>>
密码验证中...
存款中...

(1)思考为什么deposit()和withdrawl()的结果不一样?
这就是@check_password的作用
(2)思考为什么deposit()和w()的结果一样?
这就说明@check_password在功能上和w = check_password(withdrawl)是一致的。

下面解释这个现象,withdraw当做参数传入deco()函数中,什么也没有return,只是print了一句话。然后check_password()函数将deco函数return出来了。不妨这么理解,形参func化妆后的函数是deco
所以这个过程就是:check_password()将func传进来,并化了妆,之后送出去变成了deco,本质没变
若还没有理解,敲敲如下代码,便会明了。

3. 为装饰器添加参数

def func_(func):
    def deco(x):
        print("为装饰器添加参数")
        func(x)
    return deco

@func_
def myfun(x):
     print(x)
myfun("python day day up")
>>>
为装饰器添加参数
python day day up

4. 为装饰器添加跟多参数

def func_more(func):
    def deco(*args,**kwargs):
        print("添加更多的参数")
        out = func(*args,*kwargs)
        return out  
    return deco

@func_more
def myfun(a,b):
    out = a**b
    return out 
myfun(3,2)
>>>
添加更多的参数
9

参考
这是我见过的最全面的Python装饰器解释

相关文章

  • 跟老奶奶说装饰器

    本文将用通俗易懂的方式阐述装饰器,欢迎指正~ 1.没有装饰器以前,代码冗余 2. 装饰器出厂 (1)思考为什么de...

  • 装饰器

    """@装饰器- 普通装饰器- 带参数的装饰器- 通用装饰器- 装饰器装饰类- 内置装饰器- 缓存装饰器- 类实现...

  • typescript 五种装饰器

    装饰器类型 装饰器的类型有:类装饰器、访问器装饰器、属性装饰器、方法装饰器、参数装饰器,但是没有函数装饰器(fun...

  • python装饰器在接口自动化测试中的应用

    在讲解装饰器在接口自动化测试项目的应用之前,我们先来介绍一下python装饰器到底是个什么 装饰器 说装饰器就不得...

  • python 高级 13闭包 装饰器

    闭包和装饰器 1.8 闭包和装饰器 学习目标 1. 能够说出闭包的定义形式 2. 能够说出装饰器的实现形式 ...

  • 类里访问器的装饰器

    类的访问器指的就是 getter和setter访问器 类的访问器的装饰器,接收成参数跟类的方法的装饰器的参数是一样...

  • Python学习之三大名器-装饰器、迭代器、生成器

    一、装饰器 ** 装饰,顾名思义就是在原来的基础上进行美化及完善,器这里指函数,所以说装饰器就是装饰函数,也...

  • python——装饰器详解

    一、装饰器概念 1、装饰器 装饰器:一种返回值也是一个函数的函数,即装饰器。 2、装饰器目的 装饰器的目的:装饰器...

  • Python装饰器

    Python装饰器 一、函数装饰器 1.无参装饰器 示例:日志记录装饰器 2.带参装饰器 示例: 二、类装饰器 示例:

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

网友评论

      本文标题:跟老奶奶说装饰器

      本文链接:https://www.haomeiwen.com/subject/giagzftx.html