获取传递给函数的参数的列表/元组/字典?

鉴于以下function:

def foo(a, b, c): pass 

如何获得传入的参数的列表/元组/字典/等, 而不必自己构build结构

具体来说,我正在寻找Python的JavaScript的arguments关键字或PHP的func_get_args()方法的版本。

不在寻找的是使用*args**kwargs的解决scheme; 我需要在函数定义中指定参数名称(以确保它们被传入),但是在函数中,我希望在列表或字典式结构中使用它们。

您可以使用locals()来获取函数中的局部variables的字典,如下所示:

 def foo(a, b, c): print locals() >>> foo(1, 2, 3) {'a': 1, 'c': 3, 'b': 2} 

然而,这样做有点冒失,因为locals()返回本地作用域中的所有variables,而不仅仅是传递给函数的参数,所以如果不在函数的顶部调用它,结果可能包含更多的信息比你想要的要多:

 def foo(a, b, c): x = 4 y = 5 print locals() >>> foo(1, 2, 3) {'y': 5, 'x': 4, 'c': 3, 'b': 2, 'a': 1} 

我宁愿按照其他答案的build议,在函数的顶部构build一个你需要的variables的字典或列表。 它更加明确,并以更清晰的方式传达您的代码的意图,恕我直言。

您可以使用检查模块:

 def foo(x): return x inspect.getargspec(foo) Out[23]: ArgSpec(args=['x'], varargs=None, keywords=None, defaults=None) 

这是这个和这个的重复。

如果参数不符合预期,我会使用*args**kwargs并抛出一个exception

如果你想得到比python检查的错误更多的错误,你可以这样做

 def check_arguments(function_name,args,arg_names): missing_count = len(arg_names) - len(args) if missing_count > 0: if missing_count == 1: raise TypeError(function_name+"() missing 1 required positionnal argument: "+repr(arg_names[-1])) else: raise TypeError(function_name+"() missing "+str(missing_count)+" required positionnal argument: "+", ".join([repr(name) for name in arg_names][-missing_count:-1])+ " and "+repr(arg_names[-1])) 

使用与事端

 def f(*args): check_arguments("f",args,["a","b","c"]) #whatever you want ... 

你已经在头文件中指定了参数?

你为什么不简单地在身体中使用相同的信息?

 def foo(a, b, c): params = [a, b, c] 

我错过了什么?

您可以使用以下命令创build列表:

 args = [a,b,c]

您可以使用以下方法轻松创build元组:

 args =(a,b,c)

一个解决scheme,使用装饰器,在这里 。

从一个重复的(老的??)问题接受的答案https://stackoverflow.com/a/582206/1136458

  frame = inspect.currentframe() args, _, _, values = inspect.getargvalues(frame)