带参数的装饰器,多个装饰器装饰一个函数,函数的有用信息。

带参数的装饰器。import time
def timer_out(flag1):  #falg1 = flag
    def timer(f):
        def inner(*args, **kwargs):
            if flag1:
                start_time = time.time()
                time.sleep(0.3)
                ret = f(*args, **kwargs)
                end_time = time.time()
                print(‘执行效率%s‘ % (end_time-start_time))
                return ret
            else:
                ret = f(*args, **kwargs)
                return ret
        return inner
    return timer

flag = True
@timer_out(flag)  # 1,步 timer_out(flag) == timer 2,@与timer结合,变成你熟悉的装饰器 @timer
def func1():
    print(111)

@timer_out(flag)
def func2():
    print(222)

@timer_out(flag)
def func3():
    print(333)

func1()
func2()
func3()

多个装饰器装饰一个函数

def wrapper1(func): # func = f函数名
    def inner1():
        print(‘wrapper1 ,before func‘)  # 2
        func()
        print(‘wrapper1 ,after func‘)  # 4
    return inner1
def wrapper2(func):  # func = inner1
    def inner2():
        print(‘wrapper2 ,before func‘)  # 1
        func()  # inner1()
        print(‘wrapper2 ,after func‘)  # 5
    return inner2

@wrapper2  # f = wrapper2(f) 里面的f新变量 = inner1 外面的f最新变量 = inner2
@wrapper1  # f = wrapper1(f) 里面的f函数名  外面的f新变量=inner1
def f():
    print(‘in f‘)  # 3
f()  # inner2()
‘‘‘
wrapper2 ,before func
wrapper1 ,before func
in f
wrapper1 ,after func
wrapper2 ,after func
‘‘‘

函数的有用信息。

def login(username,password):
    ‘‘‘
    此函数执行了用户名和密码两个参数,完成的是登陆的功能。

    :param username:zhangyajie
    :param password:123
    :return:
    ‘‘‘
    return print(‘登陆成功‘)
print(login.__name__)
print(login.__doc__)

装饰器的有用信息

def wrapper(f):
    def inner(*args,**kwargs):
        print(f.__name__)
        print(f.__doc__)
        ret = f(*args,**kwargs)

        return ret
    return inner

@wrapper
def login(username,password):
    ‘‘‘
    此函数执行了
    :param username:
    :param password:
    :return:
    ‘‘‘
    print(‘登陆成功‘)
    return True
print(login.__name__)
print(login.__doc__)
login(1,2)
from functools import wraps
def wrapper(f):
    @wraps(f)
    def inner(*args,**kwargs):
        ‘‘‘执行函数之前‘‘‘
        ret = f(*args,**kwargs)
        ‘‘‘执行函数之后‘‘‘
        return ret
    return inner
@wrapper
def login(username,password):
    ‘‘‘
    此函数需要用户名,密码两个参数,完成的是登陆功能
    :param username: 123
    :param password: 123
    :return: True 登陆成功 false 登陆失败
    ‘‘‘

    a = 2
    c = 4
    print(‘登陆成功‘)
    return  True
print(login.__name__)
print(login.__doc__)
print(login(1,2))
for i in login.__dict__:
    print(i)

原文地址:https://www.cnblogs.com/ZJGG/p/9042956.html

时间: 2024-11-07 18:56:25

带参数的装饰器,多个装饰器装饰一个函数,函数的有用信息。的相关文章

调试器带参数调试(OD,EDB)

小东西,不要在意这些细节-- OD带参数比较简单: 文件-- 打开 --  在最下面有一个参数 KALI LINUX下的EDB 命令格式为  edb –run  "对应程序路径"  参数 (注意中间的空格) 比如: 这里调试 stack程序, 参数是abcdef

Storm问题——组件带参数构造函数未被调用,抛出NullpointerException

问题描述 不知道大家有没有遇到过这个问题,我实现了BaseRichBolt,重载一个带参数的构造函数,new这个组件时传入一个参数作为该组件的成员变量,然后在declareOutputFields方法中调用该变量,local模式运行正常,分布式模式运行就抛NPE.后来过了半小时,再提交,又OK了.(PS:其间检查了很多遍代码,没有传入NULL变量) 我在开发trident程序时,继承mapState时也出现了这个问题 可能原因 1.跟storm本身的序列化机制有关系,storm本身对组件进行序列

微信公众号带参数二维码怎么生成?

微信公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.二维码分为临时二维码和永久二维码!就算你不用代码也没关系,使用微号帮平台渠道二维码生成,轻松完成带参数二维码生成 1.登录微号帮平台操作 已注册用户,输入用户名密码登录即可:未注册用户,点击注册按钮注册一个即可. 2.选择要生成带参数二维码的服务号选择微号帮服务号,已微信认证的服务号才有生成带参数二维码的功能 3.选择渠道二维码生成即带参数二维码生成进入这个功能后,可以生成

微信公众号带参数二维码的使用?

带参数的二维码:使用微号帮平台生成,每一个二维码都带有参数,可以统计关注的每一个粉丝从哪里来的,做到渠道场景分析,方便以后进行粉丝精细化运营,使用微号帮平台其他发信息功能,针对性推送信息给公众号粉丝. 1.创建渠道二维码从微号帮后台高级功能点击[渠道二维码生成],右侧选择+创建渠道二维码 2.[0515卡券发放]实例创建[0515卡券发放],准备通过带参数二维码向粉丝发放卡券 3.扫码弹出信息设置卡券带参数二维码设置弹出卡券领取 4.卡券设置选择公众号后台已经制作好的卡券二维码,默认卡券二维码只

带参数二维码如何跟踪用户来自哪个推广人员?

运营微信公众号难免对公众号进行推广,比如每个推广人员都去推广这个公众号,然后需要统计每个推广人员到底带来了多少粉丝.公众号后台的二维码没有这个功能,开发平台接口提供带参数的二维码生成,但是需要程序员.服务器等等,成本太高.现在通过微号帮平台可以直接生成带参数二维码,每个推广人员对应一个二维码,实时统计每个推广人员带来的粉丝. 1.参数二维码统计在微号帮平台选择渠道二维码生成参数二维码 2.参数二维码[端午前夕]填写[端午前夕],所有通过这个参数二维码关注或进入公众号的粉丝都会自动打标签[端午前夕

装饰器(带参数)

如果明白装饰器的原理那么带参数的装饰器就很容易理解了 代码: def s1(func): def inner(a,b): #f1=inner(a,b) 接受2个参数,然后在把2个参数传递给func(a,b) print("hello") r =func(a,b) print("word") return r return inner @s1 def f1(a,b): print(a+b) f1(20,50) 现在有个问题如果装饰的函数有的参数是1个有的是2个怎么办?

python带参数和不带参数装饰器

http://blog.csdn.net/pipisorry/article/details/41902599 对于无参数的装饰器,其装饰器函数的参数是要被装饰的函数对象名: 对于有参数的装饰器在调用时使用的是应用的参数,@timeStumpFunc_args(argv)的argv,已不再是要被装饰的函数对象名,所以必须在内部再定义一个函数getfunc()来接收要被装饰的函数对象. #!/usr/bin/env python # coding=gbk """ __title

装饰器 装饰带参数的函数和添加函数

修饰带参数函数 1.带参数函数func1 def func1(arg): print arg 2.装饰器 def outer(fun): def wrapper(arg): print 'test' fun(arg) return wrapper 装饰器outer时期返回函数wrapper,由于要func1 带有参数,如需要将wrapper的函数带上参数,func1被装饰后重新定义为: func1(arg)=wrapper(arg)= { print 'test' func1(arg) } 在修

Python中带参数的装饰器

装饰器本身是用来是为一个函数是实现新的功能,并且不改变原函数的代码以及调用方式. 遇到这样一种问题: 众多函数调用了你写的装饰器,但客户有需求说,我想实现我可以随之控制装饰器是否生效. 那你就不可能在得到命令的时候去原函数头部去做删除和添加装饰器调用的命令.这是就可以用到带参数的装饰器,定义一个开关,调用装饰器的时候,把这个装饰器的开关参数给传递进去,这样当开关打开的时候装饰器生效,关闭的时候则只执行原函数的代码. 举例:开关参数为True的时候执行过程: 1 F = True #step 1

Python带参数的装饰器

在装饰器函数里传入参数 # -*- coding: utf-8 -*- # 2017/12/2 21:38 # 这不是什么黑魔法,你只需要让包装器传递参数: def a_decorator_passing_arguments(function_to_decorate): def a_wrapper_accepting_arguments(arg1, arg2): print("I got args! Look:", arg1, arg2) function_to_decorate(ar