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

      实现效果如下:

  • 相关阅读:
    使用 MDT 2010 进行可伸缩部署
    Windows Phone 7 WebBrowser 中文乱码问题
    如何安装Windows Phone SDK 7.1 Release Candidate (RC)
    Windows Phone应用 博客园阅读器
    将WindowsPhoneApp部署到HTC Surround,兄弟们支个招如何进行Debug
    私有代码存放仓库 BitBucket
    入门:添加一个支持获取单一资源以及支持POST,PUT和DELETE方法
    Html5 学习利器 Web Standards Update for Microsoft Visual Studio 2010 SP1
    在启用了IPV6的机器上获取客户端ipv4地址
    EMA算法的C#实现
  • 原文地址:https://www.cnblogs.com/benpao1314/p/12092754.html
Copyright © 2011-2022 走看看