如何将函数的所有参数另存为字符串?

时间:2019-06-16 20:32:37

标签: python

我正在将函数的输入参数保存为字符串。我正在使用Python 3.7。我想要保存该字符串以进行调试。

我可以轻松地做的就是这样:

def Model(par1=150, par2=100)

#some processing

return results, par1

parameters = str(par1) + str(par2)

但是,即使以后添加更多参数,我也希望能够自动保存所有参数。因此,如果我向函数添加par3 = 300,则“参数”也将包含str(par3),而不必手动添加。

我想要的行为是这样的:

def Model(--any number of parameters--)

#some processing

return results

parameters = --all parameters of Model--

我希望自动完成此操作的原因是,我希望这样会导致更多的麻烦,而不是更糟,因为我将不得不记住始终手动进行更改。

是否可以将函数的所有参数另存为字符串(或以其他方式让我稍后轻松查看函数运行了哪些参数)?

3 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情

def foo(param1, param2):
    parameters = list(locals().items())
    print(parameters)
foo(100,200)

# Outputs 
[('param1', 100), ('param2', 200)]

答案 1 :(得分:0)

问题已通过

解决
args = locals()

函数开头

答案 2 :(得分:0)

如果您想花点时间,可以创建一个装饰器,并在需要的地方使用它。这只是我写的一个简单的例子:

from functools import wraps

def save_params(func):
  @wraps(func)
  def wrapper(*args, **kwargs):
    print ('Calling {}({}{}{})'.format(
      func.__name__,
      ', '.join(map(str, args)),
      ', ' if kwargs else '',
      ', '.join('{}={}'.format(k, v) for k, v in kwargs.items())
    ))
    return func(*args, **kwargs)
  return wrapper

@save_params
def f(a, b, c=3):
  return a + b + c

现在,每当您调用f()时,参数将被打印。 @save_params可用于任何其他方法来跟踪调试期间传递的参数。看起来像这样:

>>> f(1, 2)
Calling f(1, 2)
6
>>> f(1, 2, c=7)
Calling f(1, 2, c=7)
10