我有一个函数数组,但是当我打印这个数组时,我得到了一个非常难看的输出:
[<function f1 at 0x7f708c2bf1b8>, <function f2 at 0x7f708c2bf230>, <function f3 at 0x7f708c2bf2a8>]
是否有一种魔术可以让这些函数具有等效的字符串?像这样的紧凑输出:
[<f1>, <f2>, <f3>]
或者:
['f1', 'f2', 'f3']
请您参考如下方法:
您已经正在查看等效的字符串;该值由 repr() 生成(始终用于所有容器内容):
>>> def f1(): pass
...
>>> repr(f1)
'<function f1 at 0x10232d320>'
输出是为了调试目的,而不是为了最终用户演示;十六进制地址是该对象的 id(),可帮助您区分其他类似命名的函数。如果你想产生“用户友好”的输出,做你自己的格式。例如,您可以使用列表理解;每个函数对象都有一个 __name__ 属性,您可以为此使用:
['<{}>'.format(func.__name__) for func in list_of_functions]
这仍然是一个列表,所以每个值仍然显示为调试值,但现在是字符串:
>>> list_of_functions = [f1, f2, f3]
>>> ['<{}>'.format(func.__name__) for func in list_of_functions]
['<f1>', '<f2>', '<f3>']
根据需要使用其他字符串技术进一步转换它。使用 str.join() 添加逗号,例如:
>>> ', '.join(['<{}>'.format(func.__name__) for func in list_of_functions])
'<f1>, <f2>, <f3>'
