Get a list/tuple/dict of the arguments passed to a function?
鉴于以下功能:
1 2 | def foo(a, b, c): pass |
如何获得传入的参数的list / tuple / dict / etc,而不必自己构建结构?
具体来说,我正在寻找Python的
我不想要的是使用
您可以使用
1 2 3 4 5 | def foo(a, b, c): print locals() >>> foo(1, 2, 3) {'a': 1, 'c': 3, 'b': 2} |
但是,这有点hackish,因为
1 2 3 4 5 6 7 | 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} |
我宁愿在你的函数顶部构建一个dict或变量列表,如其他答案所示。它更明确,并以更清晰的方式传达代码的意图,恕我直言。
您可以使用inspect模块:
1 2 3 4 5 | def foo(x): return x inspect.getargspec(foo) Out[23]: ArgSpec(args=['x'], varargs=None, keywords=None, defaults=None) |
这与此相关。
如果参数不符合预期,我会使用
如果你想拥有与python检查的错误相同的错误,你可以做类似的事情
1 2 3 4 5 6 7 | 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])) |
与某些人一起使用
1 2 3 4 | def f(*args): check_arguments("f",args,["a","b","c"]) #whatever you want ... |
从一个重复的(旧的??)问题接受的答案https://stackoverflow.com/a/582206/1136458:
1 2 | frame = inspect.currentframe() args, _, _, values = inspect.getargvalues(frame) |
这里有一个使用装饰器的解决方案。
您可以使用以下方法创建列表:
1 | args = [a, b, c] |
您可以使用以下方法轻松创建元组:
1 | args = (a, b, c) |
你在标题中指定了参数?
为什么不简单地在身体中使用相同的信息?
1 2 | def foo(a, b, c): params = [a, b, c] |
我错过了什么?