zoukankan      html  css  js  c++  java
  • python装饰器原理及相关操作

    python装饰器,简单的说就是用于操作底层代码的代码,在不改变底层代码函数的情况下对底层代码进行验证操作等

    首先,必须知,道调用func和func的区别,分别为返回函数所在的内存地址和调用该函数,输出执行结果,例如:

    def func():
        print("欢迎光临!!!")
    
    print("返回函数所在的内存地址:",func)
    func()

    列举一个简单的web页面调用例子

     1 #做登录验证
     2 def login(func):
     3     print("登录成功")
     4     return func
     5 
     6 def index(name):
     7     print("欢迎【%s】光临首页!"@name)
     8 def tv(name):
     9     print("欢迎【%s】光临电视页!"@name)
    10 def tv():
    11     print("欢迎光临电视页!")
    12 
    13 tv=login(tv)
    14 tv()

    由上述代码可知,为了进行登录验证,需要进行额外的操作,改变了使用部门的操作,有没有办法直接让使用部门使用tv()来调用验证呢?

     1 ef login(func):
     2     def inner(*args):
     3         print("登录成功")
     4         func(*args)
     5     return inner
     6 
     7 @login
     8 def index(name):
     9     print("Welcome %s to Index"% name)
    10 @login
    11 def tv(name,password):
    12     print("Welcome %s to TV"% name)
    13 # def tv():
    14 #     print("Welcome %s to TV")
    15 def moive(name):
    16     print("Welcome %s to Movie"% name)
    17 
    18 # tv=login(tv)
    19 # tv()
    20 tv("Eric","123")
    21 index("EEric")

    函数执行:函数首先顺序执行login,然后调转到@login,将index信息传入内存,返回index所调用的inner 函数,然后继续执行下面的函数,返回tv所调用的内部函数inner,继续执行下面的moive函数,然后继续执行下方调用,返回到inner继续执行inner内部语句,并调用函数的执行;

    装饰器的作用:即不改变原有底层函数的内部逻辑,来实现对底层函数的操作

  • 相关阅读:
    Java多线程——volatile关键字、发布和逸出
    线程安全性的基础知识
    maven web不能创建src/main/java等文件等问题
    web环境中的spring MVC
    Spring AOP 概述
    golang统计出其中英文字母、空格、数字和其它字符的个数
    go语言求1到100之内的质数
    golang fmt占位符
    golang---map类型
    golang切片类型
  • 原文地址:https://www.cnblogs.com/eric8899/p/5970999.html
Copyright © 2011-2022 走看看