zoukankan      html  css  js  c++  java
  • python 装饰器

    python

    装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。

    大多数初学者不知道在哪儿使用它们,哪些区域里装饰器可以让你的代码更简洁。 

    1、首先,我们来从函数的最基本的介绍起。

    #函数是对一个功能模块进行封装   函数在定义完成后进行调用使用
    #打印hello world ——》 无参函数 def hello(): print("hello world!") hello()

    #计算两个数的和 ———》 有参函数
    def sum_2_number(num1,num2):
    #return 返回后面结果给调用方
    return num1+num2

    print(sum_2_number(2,5))

    2、那么我们现在假设有这样的一种场景:有2个部门需要再本部门业务执行之前进行审核流程!

    #有2个部门需要再本部门业务执行之前进行审核流程!(假设每个部门在执行业务前都有三个审核流程要走。走的流程是一样的,但是具体操作不一样。)
    
    #方式一:最笨的实现方式办法
    def dep1():
    	print("审核1")
    	print("审核2")
    	print("审核3")
    	print("部门1的业务")
    
    def dep2():
    	print("审核1")
    	print("审核2")
    	print("审核3")
    	print("部门2的业务")
    
    dep1()
    dep2()
    
    #方式二:这时有人想到优化解决方案,把部门的审核流程提出来作为一个单独的函数
    
    def check():
    	print("审核1")
    	print("审核2")
    	print("审核3")
    
    def dep1():
    	check()
    	print("部门1的业务")
    
    def dep2():
    	check()
    	print("部门2的业务")
    
    dep1()
    dep2()
    

      方式二这样修改,不符合开放封闭原则(软件设计本身所追求的目标就是封装变化、降低耦合。软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。)。我们写代码的时候,不能只考虑功能的实现,还需要考虑维护以及企业的经营原则等情况。

     这时候我们就可以使用到装饰器了。#装饰器:函数嵌套定义基础完成

    def verify(func):
    
    	def check():
    		print("审核1")
    		print("审核2")
    		print("审核3")
    		func()
    	return check

    #语法糖
    #@verify 等效f1=verify(f1) @verify def dep1(): print("部门1的业务") @verify def dep2(): print("部门2的业务") dep1() dep2()

      装饰器在django、flask框架中使用的比较多。例如,我们在flask中实现一个最简单的hello

    from flask import Flask
    app=Flask(__name__)
    
    @app.route("/")
    def hello():
    	return "hello"
    
    if __name__=="__main__":
    	app.run()
    

      实现效果如下:

  • 相关阅读:
    你好,这里有一份2019年目标检测指南
    谷歌2019 学术指标发榜:CVPR首次进入Top 10,何恺明论文引用最高!
    魔图互联:知识图谱推荐系统-给人们带来更个性化的推荐
    NLPer入门指南 | 完美第一步
    一文总结数据科学家常用的Python库(下)
    一文总结数据科学家常用的Python库(上)
    一文看懂NLP神经网络发展历史中最重要的8个里程碑!
    如何为计算机视觉任务选择正确的标注类型
    C. Queen Codeforces Round #549 (Div. 2) dfs
    D. Equalize Them All Codeforces Round #550 (Div. 3)
  • 原文地址:https://www.cnblogs.com/benpao1314/p/12092754.html
Copyright © 2011-2022 走看看