Skip to main content
 首页 » 编程设计

python之有一个函数在打印时转换成它的名字

2025年05月04日12mengfanrong

我有一个函数数组,但是当我打印这个数组时,我得到了一个非常难看的输出:

[<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>'