gpt4 book ai didi

python - 获取实际传递给 Python 方法的关键字参数

转载 作者:IT老高 更新时间:2023-10-28 20:31:10 27 4
gpt4 key购买 nike

我梦想着一个带有显式关键字 args 的 Python 方法:

def func(a=None, b=None, c=None):
for arg, val in magic_arg_dict.items(): # Where do I get the magic?
print '%s: %s' % (arg, val)

我只想获取调用者实际传递给方法的那些参数的字典,就像 **kwargs 一样,但我不希望调用者能够传递任何旧的随机数args,不像 **kwargs

>>> func(b=2)
b: 2
>>> func(a=3, c=5)
a: 3
c: 5

那么:有这样的咒语吗?就我而言,我碰巧能够将每个参数与其默认值进行比较,以找到不同的参数,但这有点不雅,当你有九个参数时会变得乏味。对于加分,请提供一个咒语,即使调用者传入一个分配了其默认值的关键字参数,它也能告诉我:

>>> func(a=None)
a: None

诡计!

编辑:(词法)函数签名必须保持不变。它是公共(public) API 的一部分,显式关键字 args 的主要值(value)在于它们的文档值(value)。只是为了让事情变得有趣。 :)

最佳答案

我受到了失落理论的装饰师的启发,在玩了一会儿之后想出了这个:

def actual_kwargs():
"""
Decorator that provides the wrapped function with an attribute 'actual_kwargs'
containing just those keyword arguments actually passed in to the function.
"""
def decorator(function):
def inner(*args, **kwargs):
inner.actual_kwargs = kwargs
return function(*args, **kwargs)
return inner
return decorator


if __name__ == "__main__":

@actual_kwargs()
def func(msg, a=None, b=False, c='', d=0):
print msg
for arg, val in sorted(func.actual_kwargs.iteritems()):
print ' %s: %s' % (arg, val)

func("I'm only passing a", a='a')
func("Here's b and c", b=True, c='c')
func("All defaults", a=None, b=False, c='', d=0)
func("Nothin'")
try:
func("Invalid kwarg", e="bogon")
except TypeError, err:
print 'Invalid kwarg\n %s' % err

打印这个:

I'm only passing a  a: aHere's b and c  b: True  c: cAll defaults  a: None  b: False  c:   d: 0Nothin'Invalid kwarg  func() got an unexpected keyword argument 'e'

我对此很满意。一种更灵活的方法是将要使用的属性名称传递给装饰器,而不是将其硬编码为“actual_kwargs”,但这是说明解决方案的最简单方法。

嗯,Python 很好吃。

关于python - 获取实际传递给 Python 方法的关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1408818/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com