Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以在不指定Python中的默认值参数的情况下访问varargs_Python_Python 2.7_Arguments_Argument Passing - Fatal编程技术网

有没有一种方法可以在不指定Python中的默认值参数的情况下访问varargs

有没有一种方法可以在不指定Python中的默认值参数的情况下访问varargs,python,python-2.7,arguments,argument-passing,Python,Python 2.7,Arguments,Argument Passing,有没有一种方法可以调用foo,在函数调用中指定*args而不指定a或b,从而使用默认值 差不多 def foo(a=MyComplexObject(), b=Something(), *args): print a, b, args 这纯粹是出于好奇。您还必须将关键字参数移动到变量关键字捕获: foo(*args=(1,2,3)) Python将首先填充这两个关键字参数,否则,在Python2中,无法指定这些关键字不能由位置参数填充 Python 3使这成为可能,而无需强制使用**关

有没有一种方法可以调用
foo
,在函数调用中指定*args而不指定a或b,从而使用默认值

差不多

def foo(a=MyComplexObject(), b=Something(), *args):
    print a, b, args

这纯粹是出于好奇。

您还必须将关键字参数移动到变量关键字捕获:

foo(*args=(1,2,3))
Python将首先填充这两个关键字参数,否则,在Python2中,无法指定这些关键字不能由位置参数填充

Python 3使这成为可能,而无需强制使用
**
关键字参数catch all

如果您不能自己更改函数定义或升级到Python 3,那么您唯一的办法就是再次指定默认值,或从函数中检索它们(使用):

defaults
这里是关键字参数默认值的元组

演示:

import inspect

defaults = inspect.getargspec(foo).defaults
foo(*(defaults + (1,2,3)))

没有回答我的问题。我无法更改函数签名或函数内部的内容。@mkorpela:这就是您必须执行的操作方式。@mkorpela然后您必须执行:`foo(MyComplexObject(),Something(),*(1,2,3)),我没有访问默认值的权限。IIRC,在本例中,
a
&
b
仅实例化一次,因此它与
default\u a=MyComplexObject()
def foo(a=default\u a):
;在Python2.7中,args也位于kwargs之前。
import inspect

defaults = inspect.getargspec(foo).defaults
foo(*(defaults + (1,2,3)))
>>> 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)