我想在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

这可能吗?
(我可以考虑这样做的两个原因:从模块导入一个函数(您也希望导入docstring)和使用lexer

最佳答案

不能这样做,因为只有字符串文本被识别为docstring。但是可以使用decorator设置或修改函数的docstring。(您也可以在可执行代码中显式地修改__doc__,但是decorator要干净得多,因为它在逻辑上是声明的一部分)。
例如,如果有多个函数应包含与其docstring(部分)相同的文本,则这可能很有用。这里有一个小装饰器,它将参数(文字或变量)附加到函数声明的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

可以这样使用:
@docstring("copyright by nobody")
def testme():
    "This function does nothing"
    pass

或者您可以直接执行它,以修改现有函数(可能是从另一个模块导入的):
from re import sub
docstring("Copyright unknown")(sub)

08-20 02:41