
def foo(wIDth,height,depth=0): ...
我想编写一个包装器函数来获取所有foo的参数并将它们传递给它,例如
def goo(wIDth,depth=0): ... foo(wIDth,depth) ...
但这很难看,因为我必须重复变量和默认值.
在python中执行此 *** 作的惯用方法是什么?
我想到的几个选项:
>传递给一个名为foo_params的字典并调用foo(** foo_params)然后因为我不知道而容易出错
如果所有的论点都在那里
>为foo编写另一个包装器,检查具有默认值的参数是否为None,如果是,则不传递它们
>将默认值作为常量,这样我就不再重复了
>>> def dec(func): def inner(*args,**kwargs): print('decorated function') func(*args,**kwargs) return inner>>> @decdef 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)>>>
解决方案是使用functools.wraps().它基本上将装饰函数的数据复制到包装函数:
>>> 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)>>>总结
以上是内存溢出为你收集整理的Pythonic编写包装函数的方法全部内容,希望文章能够帮你解决Pythonic编写包装函数的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)