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

    需求:有两个函数,home()以及tv()给不同的业务部门调用,但是由于之前设计的缺陷,现在需要在登录之前做登录的验证,但是要求不能对原有的函数进行修改,而只能进行扩展。实现步骤如下:
    注意:tv返回为函数地址,tv()为函数返回值,没有定义return的话返回值为None

    def login(func):
    print ("welcome to login")
    return func

    def home(name):
    print ("welcome %s to home page"%name)

    def tv(name):
    print ("welcome [%s] to tv page" %name)


    tv = login(tv)
    tv("Alex")

    结果:

    welcome to login
    welcome [Alex] to tv page

    结论:1.先定义一个login函数,形参为函数的地址,返回值也为函数地址。

    =======================================================

    def login(func):
    def inner(arg):
    print ("welcome to login")
    func(arg)
    return inner

    def home(name):
    print ("welcome %s to home page"%name)

    @login
    def tv(name):
    print ("welcome [%s] to tv page" %name)

    #tv = login(tv)
    # print(type(tv))
    tv("Alex")
    结果:

    welcome to login
    welcome [Alex] to tv page

    结论:这里的@login等同于tv = login(tv)。执行@login,返回inner的地址(tv = inner的地址),执行tv('Alex')相当于开始执行inner('Alex')函数,同时执行func('Alex'),此时的func = tv的地址。

  • 相关阅读:
    开机自动挂载分区
    Wine安装
    ubuntu 将idea/vscode快捷方式加入到启动器中
    在Linux上安装Java
    httpclient
    shiro
    redis-随笔
    maven
    spring的aop
    spring事务知识梳理
  • 原文地址:https://www.cnblogs.com/python-study/p/5464010.html
Copyright © 2011-2022 走看看