将docstring设置为def中的表达式

And*_*den 4 python docstring

我想以设置func_doc(作为表达) def.

def f():
    '''My function help''' #Set the docstring

def g():
    "My function " + "help" # An expression, so not read as a docstring
    # can I put something here to set the docstring as an expression?
g.func_doc # is None
g.func_doc = "My function " + "help" # This works
Run Code Online (Sandbox Code Playgroud)

这可能吗?

(我可以考虑这样做的两个原因:从模块导入函数(并且您也想导入文档字符串)和使用词法分析器.)

ale*_*xis 5

您不能这样做,因为只有字符串文字被识别为文档字符串.但是您可以使用装饰器来设置或修改函数的文档字符串.(您也可以__doc__在可执行代码中明确修改,但装饰器更清晰,因为它在逻辑上是声明的一部分).

这可能很有用,例如,如果您有多个函数应包含与其文档字符串(的一部分)相同的文本.这是一个小装饰器,它将其参数(文字或变量)附加到函数声明的docstring.

def docstring(docstr, sep="\n"):
    """
    Decorator: Append to a function's docstring.
    """
    def _decorator(func):
        if func.__doc__ == None:
            func.__doc__ = docstr
        else:
            func.__doc__ = sep.join([func.__doc__, docstr])
        return func
    return _decorator
Run Code Online (Sandbox Code Playgroud)

它可以像这样使用:

@docstring("copyright by nobody")
def testme():
    "This function does nothing"
    pass
Run Code Online (Sandbox Code Playgroud)

或者您可以直接执行它来修改现有函数(可能从另一个模块导入):

from re import sub
docstring("Copyright unknown")(sub)
Run Code Online (Sandbox Code Playgroud)