2024-10-02 12:28:51 发布
网友
def foo(a=MyComplexObject(), b=Something(), *args): print a, b, args
有没有办法调用foo,在函数调用中指定*args而不是指定a或b,从而使用默认值?你知道吗
foo
像这样的
foo(*args=(1,2,3))
这纯粹是出于好奇。你知道吗
您还必须将关键字参数移动到变量关键字捕获:
def foo(*args, **kw): a = kw.get('a', MyComplexObject()) b = kw.get('b', b=Something()) print a, b, args
Python将首先填充两个关键字参数first,否则,在python2中,无法指定这些关键字不能由位置参数填充。你知道吗
python3changed the interpretation of the positional catchall parameter使之成为可能,而不必强制使用**关键字参数catch all。你知道吗
**
如果您不能自己更改函数定义或升级到python3,那么您唯一的办法就是再次指定默认值,或从函数中检索它们(使用^{} convenience function):
import inspect defaults = inspect.getargspec(foo).defaults foo(*(defaults + (1,2,3)))
defaults这里是关键字参数默认值的元组。你知道吗
defaults
演示:
>>> import inspect >>> def foo(a='spam', b='foo', *args): ... print a, b, args ... >>> defaults = inspect.getargspec(foo).defaults >>> foo(*(defaults + (1,2,3))) spam foo (1, 2, 3)
您还必须将关键字参数移动到变量关键字捕获:
Python将首先填充两个关键字参数first,否则,在python2中,无法指定这些关键字不能由位置参数填充。你知道吗
python3changed the interpretation of the positional catchall parameter使之成为可能,而不必强制使用
**
关键字参数catch all。你知道吗如果您不能自己更改函数定义或升级到python3,那么您唯一的办法就是再次指定默认值,或从函数中检索它们(使用^{} convenience function ):
defaults
这里是关键字参数默认值的元组。你知道吗演示:
相关问题 更多 >
编程相关推荐