[英]How to print the list of args and kwargs
在我的代码中,我有很多地方将一个函数及其参数传递给另一个函数。 出于调试目的,我想打印函数的名称和参数列表。 例如
def process(f, *args, **kwargs):
print("processing " + print_func(f, args, kwargs))
process(myfunc, 1,2, a="A",b=0)
的预期输出应该是"processing myfunc(1,2,a="A", b=0)"
我在打印args
方面取得了一些进展,如下所示:
def print_func(f, *args, **kwarg):
func_str = f.__name__ + "("
if len(args) > 0:
func_str = func_str + (', '.join(['%.2f']*len(x)) % args)
func_str = func_str + ")"
在上面的例子中将产生输出processing myfunc(1,2)
我的问题是如何打印 kwargs。 我无法找出使用动态格式字符串的类似解决方案,将其打印为由“,”分隔的k=v
对序列。
任何建议将不胜感激。
要格式化args
和kwargs
,您可以简单地遍历它们并创建您的字符串表示
def process(my_func, *args, **kwargs):
#Iterate over all args, convert them to str, and join them
args_str = ','.join(map(str,args))
#Iterater over all kwargs, convert them into k=v and join them
kwargs_str = ','.join('{}={}'.format(k,v) for k,v in kwargs.items())
#Or using f-strings
#kwargs_str = ','.join(f'{k}={v}' for k,v in kwargs.items()
#Form the final representation by adding func name
return "processing {}({})".format(my_func.__name__, ','.join([args_str,kwargs_str]))
#Or using f-strings
#return f"processing {my_func.__name__}({','.join([args_str,kwargs_str])})"
print(process(my_func, 1,2, a="A",b=0))
输出将是
processing my_func(1,2,a=A,b=0)
您可以通过创建这样的注释来做到这一点
def printArgs(my_func):
def wrapper(*arg, **kwargs):
print("{}({})".format(my_func.__name__, ','.join([str(arg),str(kwargs)])))
return my_func(*arg, **kwargs)
return wrapper
@printArgs
def a_function_where_you_want_to_print_args(arg1, arg2, arg3="arg3"):
pass
a_function_where_you_want_to_print_args(1,2, arg3="b")
这将打印“a_function_where_you_want_to_print_args((1, 2),{'arg3': 'b'})”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.