• Python装饰器


       1.首先我们来简单的定义一个函数

    def func():
    print("这是一个函数")

    func():调用该函数结果: 这是一个函数

    2.现在我有一个需求,需要在执行这个函数之前打印一句话
    那么我怎么做好?
    def func():
    print("我是打印功能A")
    print("这是一个函数")
    func() 结果: 我是打印功能A
          这是一个函数
    这样是实现了我的需求,但是仔细想想,如果我还要加需求怎么办?依然在func()里面去加吗?显然这样做不好维护
    那么我们来调整一下
    3.重新定义一个函数
    def func_print():
    print("我是打印功能A")
    func_print()
    func() :结果也是一样,这样比之前的代码要好的多了吧。那么现在又有一个问题,假如有人要调用我这个函数并且希望得到这2个语句怎么办?

    4.那么好吧,我们在定义一个函数不就行了吗?
    def func1():
    func_print()
    func()
    func1():同样的能够解决我们的需求,但是不对阿,我想调用的是func(),你怎么给我func()1? 额,好吧,那我再改改

    5.那么我怎么样才能让别人只调用我的func()函数就能得到他想要的效果呢,我记得python中有一个闭包概念,咱们来试试
    def func1(f):
    def inner():
    func_print()
    f()
    return inner
    func = func1(func) :调用外部函数并传入func
    func():得到结果,看似很完美的解决了问题,可是还是多了一个调用

    6.这里就又要引入一个语法糖的东西了
    @func1 :这个地方相当于func = func1(func)
    def func():
      print("这是一个函数")
    好了 现在调用func()得到的结果就是:
    我是打印功能A
    这是一个函数
    注:本人不是大神,写这些纯粹是为了检验自己和分享一下心得,希望大家能够一起学习。有什么写的不对的地方还望指正,必虚心受教

  • 相关阅读:
    iOS优化内存方法推荐
    Swift和OC,是编译型语言、解释性语言、运行时语言
    redis常用命令
    redis 基本类型
    spring中事务配置
    redis 基本概览
    ThreadLocal 类说明
    spring 中 AOP 功能
    ps抠图简单方法
    nginx配置文件中location说明
  • 原文地址:https://www.cnblogs.com/yaoczz/p/10627849.html
Copyright © 2020-2023  润新知