Python装饰器深入全面理解(4)

上面例子定义func装饰器时,我们用*name来接受任意个数的位置参数,可别以为只能用*args,args只是一个变量名,只不过约定俗成,用的多一些,实际开发时你爱取啥名就用啥名,对于这个知识点不再多说,毕竟本篇主角是装饰器。我们继续装饰器内容!

当我们知道只有关键字参数,却不知道参数个数时,可以func装饰器这么写:

def func(f): def inner_func(**name): print('{}函数开始运行……'.format(f.__name__)) ret = f(**name) print('{}函数结束运行……'.format(f.__name__)) return ret return inner_func @func def do_something(name='无名氏'): print('你好,{}!'.format(name)) @func def do_something_2(name_1='无名氏', name_2='无名氏'): print('你好,{}!'.format(name_1)) print('你好,{}!'.format(name_2)) @func def do_something_3(**name): for n in name.keys(): print('你好,{}!'.format(name[n])) if __name__ == '__main__': do_something(name='姚明') print('-------------------------------') do_something_2(name_1='姚大明', name_2='姚小明') print('-------------------------------') do_something_3(name_1='姚一明', name_2='姚二明', name_3='姚三明', name_4='姚四明')

输出结果:

do_something函数开始运行……

你好,姚明!

do_something函数结束运行……

-------------------------------

do_something_2函数开始运行……

你好,姚大明!

你好,姚小明!

do_something_2函数结束运行……

-------------------------------

do_something_3函数开始运行……

你好,姚一明!

你好,姚二明!

你好,姚三明!

你好,姚四明!

do_something_3函数结束运行……

事实上,大多数情况下,我们对被装饰函数是一无所知的——我们不知道有多少个位置参数、多少个关键字参数,甚至对有没有位置参数、关键字参数都不知道,这时候,我们就只能*args和**kwargs齐上阵了:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b06b6a34177ef29eb92256fd117164fe.html