iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 装饰器(二): 加参数
  • 430
分享到

python 装饰器(二): 加参数

参数python 2023-01-30 23:01:36 430人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

接上篇python 闭包&装饰器(一) 一、功能函数加参数:实现一个可以接收任意数据的加法器 源代码如下: def show_time(f): def inner(*x, **y): # 形参

接上篇python 闭包&装饰器(一)

一、功能函数加参数:实现一个可以接收任意数据的加法器

源代码如下:

def show_time(f):

    def inner(*x, **y):     # 形参
        start = time.time()
        f(*x, **y)     # 相当于add()
        end = time.time()
        print('spend %s' % (end - start))

    return inner

@show_time  # @show_time 等于 add = show_time(add)
def add(*a, **b):   # 实参  可以接收任意参数
    sums = 0
    for i in a:
        sums += i
    print(sums)
    time.sleep(1)

add(1, 2, 3, 4, 5)    # 15

二、装饰器函数加参数:根据需求打印日志

源代码如下:

def logger(flag=''):      # flag 默认为空,这一层函数的作用是应用标志位
    def show_time(f):
        def inner(*x, **y):
            start = time.time()
            f(*x, **y)           # 相当于add()
            end = time.time()
            print('spend %s' % (end - start))
            if flag == 'true':
                print('打印日志')

        return inner
    return show_time


@logger('true')     # @show_time
def add(*a, **b):    # 不管有名参数和无名参数都可以接收到
    sums = 0
    for i in a:
        sums += i
    print(sums)
    time.sleep(1)

add(1, 2, 3, 4, 5)


@logger('true')
def bar():
    print('bar.......')
    time.sleep(3)    # 停留3秒

bar()

注意:@logger('true') 的执行机制是:先执行 logger('true') 函数,然后返回 show_time 函数的内存地址, 所以 @logger('true') 就相当于 @show_time,两者的区别就是 @logger('true') 要了一个变量flag, 之后的装饰器函数里面就可以使用falg这个标志位了

--结束END--

本文标题: python 装饰器(二): 加参数

本文链接: https://www.lsjlt.com/news/181163.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作