如何将函数的所有参数保存为字符串? [复制]

Posted

技术标签:

【中文标题】如何将函数的所有参数保存为字符串? [复制]【英文标题】:How to save all parameters of a function as a string? [duplicate] 【发布时间】:2019-10-30 12:31:59 【问题描述】:

我希望将函数的输入参数保存为字符串。我正在使用 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--

我想让它自动完成的原因是我希望否则它会造成更多的麻烦而不是更糟,因为我必须记住一直手动更改它。

是否可以将函数的所有参数保存为字符串(或以任何其他方式让我稍后轻松检查函数运行的参数)?

【问题讨论】:

谢谢!这些链接很有帮助。 【参考方案1】:

你可以试试这样的

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

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

【讨论】:

谢谢! locals() 正是我所需要的。我只是在函数的开头将它保存为``` args = locals() ``` 没问题!如果有用请采纳答案【参考方案2】:

问题解决了

args = locals()

在函数的开头

【讨论】:

【参考方案3】:

如果你想变得花哨一点,你可以创建一个装饰器并在你需要的地方使用它。这里只是我写的一个简单的:

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

【讨论】:

以上是关于如何将函数的所有参数保存为字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数作为字符串连接,中间有空格? [复制]

如何将 PHP 字符串传递给 Javascript 函数调用? [复制]

如何将字符串转换为 JavaScript 函数调用? [复制]

如何 grep 字符串的目录,将其重写为其他内容并保存在 bash 中? [复制]

如何将“#ffff”字符串颜色作为参数提供给 setBackgroundColor()? [复制]

如何将字符串保存到 C++ 中类的 string* 成员?