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

    1. 

    def deco(func):
        def inner():
            return "running inner"
        return inner
    
    @deco
    def target():
        print("running target")
    
    print(target())
    print(target)

    输出

    running inner
    <function deco.<locals>.inner at 0x000002D1FC2F32F0>

    2. 

    def tag(func):
        def inner(text):
            value = func(text)
            return "<p>" + value + "<p>"
        return inner
    
    
    #@tag
    def my_upper(text):
        value = text.upper()
        return value
    
    my_upper = tag(my_upper)  # 相当于@tag下写my_upper函数
    print(my_upper) print(my_upper("hello"))

    输出

    <function tag.<locals>.inner at 0x000002BA178932F0>   my_upper相当于inner函数对象
    <p>HELLO<p>

    inner函数中的func相当于闭包中的自由变量,只不过变量变成了函数对象

    3. 带参数的装饰器

    def arg(name):
        def tag(func):
            def inner(text):
                value = func(text)
                return "<{name}>{value}</{name}>".format(name=name, value=value)
            return inner
        return tag
    
    
    @arg("p")
    def my_upper(text):
        value = text.upper()
        return value
    

    # 不用@相当于
    #tag = arg("p") # 传入接收的参数"p"并返回tag函数对象

    #my_upper = tag(my_upper) # 传入my_upper并返回inner函数对象
    #my_upper("hello") 调用inner函数

    print(my_upper) print(my_upper("hello"))

    输出

    <function arg.<locals>.tag.<locals>.inner at 0x00000219DB683378>
    <p>HELLO</p>

    在原来装饰器函数的基础上,外面再嵌套一个带参数的函数,这个参数可以用在inner函数中

  • 相关阅读:
    好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效button
    ZOJ
    为应用程序加入缓存
    3、Spring4之Bean 配置的细节
    POJ
    解决apache+tomcatserver环境中文乱码的问题
    2014年CCNU-ACM暑期集训总结
    POJ 1328 Radar Installation(贪心)
    CF 452A(Eevee-直接试)
    Android中View和ViewGroup介绍
  • 原文地址:https://www.cnblogs.com/regit/p/12808779.html
Copyright © 2011-2022 走看看