如何获得给定点的函数名和/或描述

2024-10-06 12:41:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python2.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)

Tags: namefalsetrueforreturnthatvaluedef
3条回答

可以通过__name____doc__属性访问函数名及其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)"
Function: predicateA
Documentation:
    some logic that eventually returns a True/False value

Function: predicateB
Documentation:
    some logic that eventually returns a True/False value

(This function always returns false)

如果函数有适当的doc string,则可以使用__name____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 string进行的,并放在函数头后面的三重双精度或单精度代码中。除非这样做,否则__doc__将返回空。你知道吗

您可以向函数中添加各种属性,还可以包含一个文档字符串:

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

fun.foo = 2
fun.baz = "will do naught"

相关问题 更多 >