Pythonic编写包装函数的方法

Pythonic编写包装函数的方法,第1张

概述假设我有一个函数foo,它可以获得一些参数 def foo(width, height, depth=0): ... 我想编写一个包装器函数来获取所有foo的参数并将它们传递给它,例如 def goo(width, height, depth=0): ... foo(width, height, depth) ... 但这很难看,因为我必须重复变量和默认值. 在py 假设我有一个函数foo,它可以获得一些参数

def foo(wIDth,height,depth=0):    ...

我想编写一个包装器函数来获取所有foo的参数并将它们传递给它,例如

def goo(wIDth,depth=0):    ...    foo(wIDth,depth)    ...

但这很难看,因为我必须重复变量和默认值.

在python中执行此 *** 作的惯用方法是什么?

我想到的几个选项:

>传递给一个名为foo_params的字典并调用foo(** foo_params)然后因为我不知道而容易出错
如果所有的论点都在那里
>为foo编写另一个包装器,检查具有默认值的参数是否为None,如果是,则不传递它们
>将默认值作为常量,这样我就不再重复了

解决方法 您可以使用* args和** kwargs语法来传递未知数量的参数和/或关键字参数:

>>> 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编写包装函数的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1193978.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存