2016-03-28 5 views
0

私はPythonで関数をテストするためにformatを使用しています。私は%および/または関数文字列の形式

Sqrt(4)=2 

する

test(Sqrt,4) 

与えられた機能

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

の出力をしたいと思います。しかしフォーマットはタイプ「機能」と角括弧内のメモリアドレスをバック与えています。出力を短くして、後になっているものを得るためのすてきな方法はありますか?あなたは__name__を使用するために探している

答えて

4

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. 

これらのタイプの属性を使用する場合は、何をにすることができます。通常、これはの呼び出し可能なタイプで利用できます(たとえば、メソッドやクラスを定義するときは__name__属性を利用できます)。あなたは、単にのような非呼び出し可能な、何か定義した場合でも:

x = 5 

をしてx.__name__を呼び出そう、あなたはPythonでほとんどのオブジェクトとは異なりAttributeError

2

で満たされる、機能が__name__属性がに設定されていますそれらが定義された名前。

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

クラスも__name__を持っていますが、他のほとんどの呼び出し可能オブジェクトにはありません:あなたはそれを使用することができます。 fが他の種類の呼び出し可能な呼び出し元である場合、呼び出し可能な呼び出しの種類とその実装を制御するかどうかによって、処理を異なる方法で処理する必要があります。

関連する問題