• 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()
    

      实现效果如下:

  • 相关阅读:
    Python字典dict对象方法总结
    PythonString字符串的相关方法
    Mysql5.7.20使用group by查询(select *)时出现错误修改sql mode
    HtmlTestRunner无法生成HTML报告问题
    话说 type 之 record 记录的使用技巧 F#
    Silverlight OOB 获取桌面可视尺寸 F# PInvoke
    目前让 F# 支持 Silverlight 5 的解决方案(包括 lazy 不可用)
    话说 type 之 let 绑定与 val 显式字段 F#
    这两天自己模仿写的一个Asp.Net的显示分页方法 附加实体转换和存储过程 带源码下载
    Asp.net 在三层架构中事务的使用
  • 原文地址:https://www.cnblogs.com/benpao1314/p/12092754.html
Copyright © 2020-2023  润新知