【问题标题】: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--

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

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

【问题讨论】:

  • 谢谢!这些链接很有帮助。

标签: python


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2021-12-28
      • 2021-12-24
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多