打印传递给函数的参数
有没有一种比较“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
2 个回答
1
你可以使用装饰器——我觉得装饰器在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
1
如果你所有的默认值都是 None
,那么你可以直接打印那些不是 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)