python - 如何打印 args 和 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
and 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)
推荐阅读
- bash - bash 星号转义在 echo 中打印 \*
- c# - .NET Core Fakes 和 VS 2019 Preview 6.9.0 Preview 2.0 找不到类型或命名空间名称
- docker - Docker 将文件从主机复制到映像
- swift - SecKeyCreateSignature 在哪里获取钥匙串签名授权对话框的密钥名称?
- python - 乌龟显示错误,以前可以正常工作
- java - 当我按下“新项目”时,如何在 Intellij Idea 的开始菜单中配置技术列表
- java - 是否可以自定义java流groupingBy的key?
- python - 将字典键和值转换为单独的列表?
- c - 在C中使用链表和横向树按顺序创建家谱
- spring - Spring Batch - AmqpWriter 和 AmqpReader 示例