Pythonic编写包装函数的方法
发布时间:2020-12-20 12:01:44 所属栏目:Python 来源:网络整理
导读:假设我有一个函数foo,它可以获得一些参数 def foo(width,height,depth=0): ... 我想编写一个包装器函数来获取所有foo的参数并将它们传递给它,例如 def goo(width,depth=0): ... foo(width,depth) ... 但这很难看,因为我必须重复变量和默认值. 在python中执行
假设我有一个函数foo,它可以获得一些参数
def foo(width,height,depth=0): ... 我想编写一个包装器函数来获取所有foo的参数并将它们传递给它,例如 def goo(width,depth=0): ... foo(width,depth) ... 但这很难看,因为我必须重复变量和默认值. 在python中执行此操作的惯用方法是什么? 我想到的几个选项: >传递给一个名为foo_params的字典并调用foo(** foo_params)然后因为我不知道而容易出错 解决方法
您可以使用* args和** kwargs语法来传递未知数量的参数和/或关键字参数:
>>> def dec(func): def inner(*args,**kwargs): print('decorated function') func(*args,**kwargs) return inner >>> @dec def func(a,b): return a + b >>> func(1,2) decorated function >>> 使用* args和** kwargs的一个缺点是你将失去装饰函数的原始函数签名.例如: >>> help(func) Help on function inner in module __main__: inner(*args,**kwargs) >>> 解决方案是使用 >>> from functools import wraps >>> >>> def dec(func): @wraps(func) def inner(*args,2) decorated function >>> 你可以在下面看到,如果你现在做帮助(func),将显示func的原始签名: >>> help(func) Help on function func in module __main__: func(a,b) >>> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |