1

私はPython 2.7を使用しています。以下のコードのように、外部辞書を使用してそのような情報を保持する必要がないように、名前、説明、およびおそらく他のメタデータを関数に関連付ける方法はありますか?

def predicateA(v):
    # some logic that eventually returns a True/False value
    return True

def predicateB(v):
    # some logic that eventually returns a True/False value
    return False

predicateNames={}
predicateNames[predicateA]='name and description for predicateA'
predicateNames[predicateB]='name and description for predicateB'

predicates = [predicateA, predicateB]

def evalForAllPredicates(v):
    for f in predicates:
       result = f(v)
       print "function %s returned: %s" % (predicateNames[f], result)

evalForAllPredicates(3)
4

4 に答える 4

2

関数に適切なドキュメント文字列__name__がある場合は、 and__doc__属性を使用できます

>>> def predicateA(v):
    '''some logic that eventually returns a True/False value
    '''
    return True

>>> predicateA.__doc__
'some logic that eventually returns a True/False value\n    '
>>> predicateA.__name__
'predicateA'

あなたの例では、必要な説明はdoc文字列を介して行われ、関数ヘッダーの直後のトリプルダブルまたはシングルコード内に配置されます。そうしないと、__doc__空になります。

于 2013-02-01T08:54:48.753 に答える
2

__name__および__doc__属性を介して、関数の名前とその docstring にアクセスできます。関数の docstring は、関数の最初のステートメントとして配置された単なる文字列リテラルです。docstring は多くの行にまたがることが予想されるため、慣習として、三重引用符を使用して docstring を囲みます。

def predicateA(v):
    """
    some logic that eventually returns a True/False value
    """
    return True

print "Name:", predicateA.__name__
print "Doc:", predicateB.__doc__

任意のメタデータを関数に関連付けるには、通常のオブジェクトであるかのように、好きな属性を関数に割り当てるだけです。

def predicateB(v):
    """
    some logic that eventually returns a True/False value
    """
    return False

predicateA.alwaysReturnsFalse = False
predicateB.alwaysReturnsFalse = True

for pred in [predicateA, predicateB]:
    print "Function:", pred.__name__
    print "Documentation:", pred.__doc__
    if pred.alwaysReturnsFalse:
        print "(This function always returns false)"
関数: predicateA
ドキュメンテーション:
    最終的に True/False 値を返すロジック

関数: predicateB
ドキュメンテーション:
    最終的に True/False 値を返すロジック

(この関数は常に false を返します)
于 2013-02-01T09:02:10.730 に答える
1

__name__および属性を使用して、__doc__それぞれ関数名とdoc-stringを取得できます。

于 2013-02-01T08:53:20.283 に答える
1

関数にはあらゆる種類の属性を追加でき、doc 文字列を含めることができます。

def fun(x)
    """
    Description ...
    """
    pass

fun.foo = 2
fun.baz = "will do naught"
于 2013-02-01T08:53:08.927 に答える