【问题标题】:Print parameters passed to the function打印传递给函数的参数
【发布时间】:2014-03-19 18:22:31
【问题描述】:

是否有一种 Python 方式来打印传递给函数的所有参数?

我有一个类似下面的函数...

def modify_setting(self, keyword, method=None, value=None, limit=None, parameter=None):

当我调用这个函数时,我不会将每个参数都传递给参数。我想到的只是详细地调用每个参数,如下所示,但这会产生我不想要的结果。

print "{} Modified: {}, {}, {}, {}".format(keyword,  method, value, limit, parameter)

结果:

Acquisition Mode Modified: Static, 10, None, None

我想要的(或类似的):

Acquisition Mode Modified: Static, 10

【问题讨论】:

  • 都是默认的None?
  • @goncalopp 是的,这取决于使用哪个设置,使用哪个参数。
  • print locals() 作为函数中的第一个语句

标签: python function parameters arguments


【解决方案1】:

如果你所有的默认值都是None,你可以简单地打印不是的变量:

print "{} Modified: {}".format(keyword,  method, ", ".join( [str(v) for v in (value, limit, parameter) if not v is None]))

您可以更好地构建代码:

vars= (value, limit, parameter)
vars_str= ", ".join( [str(v) for v in vars if not v is None]
print "{} Modified: {}".format(keyword,  method, vars_str)

【讨论】:

    【解决方案2】:

    你可以使用装饰器——我想装饰器是 Python 的:

    def dump_args(func):
        "This decorator dumps out the arguments passed to a function before calling it"
        argnames = func.func_code.co_varnames[:func.func_code.co_argcount]
        fname = func.func_name
    
        def echo_func(*args,**kwargs):
            print fname, ":", ', '.join(
                '%s=%r' % entry
                for entry in zip(argnames,args) + kwargs.items())
            return func(*args, **kwargs)
    
        return echo_func
    
    @dump_args
    def f1(a,b,c):
        print a + b + c
    
    >>> f1(1, 2, 3)
    f1 : a=1, b=2, c=3
    6
    >>>
    
    @dump_args
    def f2(a, b = None, c = None):
        print '{}/{}/{}'.format(a, b, c)
    
    >>> f2(1, c = 3)
    f2 : a=1, c=3
    1/None/3
    >>>
    

    在这里找到装饰器:https://wiki.python.org/moin/PythonDecoratorLibrary

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2013-01-27
      • 2020-03-24
      • 1970-01-01
      相关资源
      最近更新 更多