【发布时间】:2016-07-16 08:12:34
【问题描述】:
我正在使用格式来测试 Python 中的函数。我想要一个函数的输出
def test(f,k):
print "{0}({1})={2}".format(f,k,f(k))
给定
test(Sqrt,4)
成为
Sqrt(4)=2
但是格式会返回类型“函数”和尖括号内的内存地址。有没有一种巧妙的方法来缩短输出以获得我想要的东西?
【问题讨论】:
我正在使用格式来测试 Python 中的函数。我想要一个函数的输出
def test(f,k):
print "{0}({1})={2}".format(f,k,f(k))
给定
test(Sqrt,4)
成为
Sqrt(4)=2
但是格式会返回类型“函数”和尖括号内的内存地址。有没有一种巧妙的方法来缩短输出以获得我想要的东西?
【问题讨论】:
您希望使用__name__:
def test(f,k):
print("{0}({1})={2}".format(f.__name__,k,f(k)))
test(sqrt, 2)
输出:
sqrt(2)=1.4142135623730951
从数据模型文档here 的“可调用类型”部分,__name__ 很简单:
__name__ func_name : The function’s name.
仔细阅读文档以了解当您想要使用这些类型的属性时可以使用什么。通常,这将可用于 callable 类型(例如,在定义方法或类时,__name__ 属性将可供您使用)。但如果你只是定义一个不可调用的,类似:
x = 5
并尝试拨打x.__name__,您将收到AttributeError
【讨论】:
与 Python 中的大多数对象不同,函数的 __name__ 属性设置为定义它们的名称。你可以使用它:
print "{0}({1})={2}".format(f.__name__, k, f(k))
类也有__name__,但大多数其他可调用对象没有。如果f 是其他类型的可调用对象,则您必须以不同的方式处理它,具体方式取决于它是什么类型的可调用对象以及您是否控制其实现。
【讨论】: