python:函数字符串的format用法

本问题已经有最佳答案,请猛点这里访问。

我使用format来测试Python中的函数。我想要一个函数的输出

1
2
def test(f,k):
    print"{0}({1})={2}".format(f,k,f(k))

鉴于

1
test(Sqrt,4)

1
Sqrt(4)=2

但是format返回了类型'function'和一个在角括号内的内存地址。有没有一种简洁的方法来缩短输出来得到我想要的?


您希望使用__name__:

1
2
3
4
def test(f,k):
    print("{0}({1})={2}".format(f.__name__,k,f(k)))

test(sqrt, 2)

输出:

1
sqrt(2)=1.4142135623730951

从这里的数据模型文档的"可调用类型"部分,__name__很简单:

1
__name__ func_name : The function’s name.

仔细阅读文档,了解当您想要使用这些类型的属性时,哪些是可用的。通常,这对于可调用类型是可用的(例如,当定义一个方法或类时,__name__属性对您是可用的)。但是如果您简单地定义了一个不可调用的函数,比如:

1
x = 5

并尝试调用x.__name__,您将遇到一个AttributeError


与Python中的大多数对象不同,函数有一个__name__属性设置为它们定义的名称。你可以这样说:

1
print"{0}({1})={2}".format(f.__name__, k, f(k))

类也有一个__name__,但是大多数其他可调用项没有。如果f是另一种可调用类型,则必须以不同的方式处理它,具体方式取决于它是哪种可调用类型以及您是否控制它的实现。