相关疑难解决方法(0)

获取函数参数的默认值?

对于这个功能

def eat_dog(name, should_digest=True):
    print "ate dog named %s. Digested, too? %" % (name, str(should_digest))
Run Code Online (Sandbox Code Playgroud)

我希望,在函数外部,读取它的参数和附加的任何默认值.所以对于这个具体的例子,我想知道它name没有默认值(即它是必需的参数),这True是默认值should_digest.

我知道inspect.getargspec(),它确实给了我关于参数和默认值的信息,但我发现两者之间没有联系:

ArgSpec(args=['name', 'should_digest'], varargs=None, keywords=None, defaults=(True,))

从这个输出我怎么能告诉True(在defaults元组中)是默认值should_digest

另外,我知道接近问题的"请求宽恕"模型,但不幸的是,该错误的输出不会告诉我缺少参数的名称:

>>> eat_dog()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: eat_dog() takes at least 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)

为了给出上下文(为什么我要这样做),我通过JSON API在模块中公开函数.如果调用者省略了某些函数参数,我想返回一个特定的错误,该错误命名了省略的特定函数参数.如果客户端省略了参数,但函数签名中提供了默认值,我想使用该默认值.

python

52
推荐指数
4
解决办法
2万
查看次数

'kwargs' 在 python 装饰器中为空

我在下面运行了一个装饰器演示。

def logger(func):
    def inner(*args, **kwargs):
        print(args)
        print(kwargs)
        return func(*args, **kwargs)
    return inner

@logger
def foo1(a, b, c, x=2, y=1):
    print(x * y)

foo1(6,7,8)
Run Code Online (Sandbox Code Playgroud)

输出是:

(6, 7, 8)
{}
2
Run Code Online (Sandbox Code Playgroud)

为什么字典是空的?我认为应该是{'x':2, 'y':1}

python decorator

5
推荐指数
1
解决办法
1928
查看次数

标签 统计

python ×2

decorator ×1