我正在将函数的输入参数保存为字符串。我正在使用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--
我希望自动完成此操作的原因是,我希望这样会导致更多的麻烦,而不是更糟,因为我将不得不记住始终手动进行更改。
是否可以将函数的所有参数另存为字符串(或以其他方式让我稍后轻松查看函数运行了哪些参数)?
答案 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