• 装饰器


    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函数中

  • 相关阅读:
    爬虫大作业
    数据结构化与保存
    爬取校园新闻首页的新闻
    爬取校园新闻
    网络爬虫基础练习
    中文词频统计
    在线检测网页在各种浏览器的打开效果
    Tomcat内存设置详解
    as3.0 [Embed]标签嵌入外部资源
    Flex学习总结
  • 原文地址:https://www.cnblogs.com/regit/p/12808779.html
Copyright © 2020-2023  润新知