python文档字符串可写吗?似乎是

python文档字符串可写吗?似乎是,python,docstring,Python,Docstring,TL;DR是一个docstring,应该可以像 x.__doc__ = 'string' ? 它似乎在3.5.2中起作用 我已经编写了获取和检查GUI键盘输入的函数。如果有人需要详细信息,请查看代码 它的一个基本部分是能够使用提供的检查函数来检查输入字符串在任何给定上下文中是否有效。不管是好是坏,我决定使用check函数docstring向GUI提供帮助信息,然后GUI将解析它,这很容易做到 这是一个例子,在'pair of float'检查函数中,将帮助提示编码到docstring中是相当明

TL;DR是一个docstring,应该可以像

x.__doc__ = 'string' ?
它似乎在3.5.2中起作用

我已经编写了获取和检查GUI键盘输入的函数。如果有人需要详细信息,请查看代码

它的一个基本部分是能够使用提供的检查函数来检查输入字符串在任何给定上下文中是否有效。不管是好是坏,我决定使用check函数docstring向GUI提供帮助信息,然后GUI将解析它,这很容易做到

这是一个例子,在'pair of float'检查函数中,将帮助提示编码到docstring中是相当明显的

def float_pair(in_str):
    """[f,f] Two floats separated by a comma
    [end_help]
    in_str     input string which should represent float, float
    raise      ValueError if that's not true
    return     a list of the two values
    """
    fields = in_str.split(',')
    if len(fields) != 2:
        raise ValueError('need two floats separated by one comma')
    output = [float(f) for f in fields]  
    return output
现在我想添加一个功能来检查浮点是否在某个范围内,理想情况下将该范围传递给check函数工厂。理想情况下,返回函数的docstring将包含范围,因此GUI提供的帮助是相关的。因此,我需要在运行时设置docstring

大量的搜索让我对docstring是否应该是可写的感到困惑。我看到了这个问题。不幸的是,我只是一个物理学家出身的程序员,不是一个熟练的元程序员,所以我不理解其中的细节

因此,我以最简单的方式尝试了它,它似乎很有效,至少在Python3.5.2上是如此。如果不超过f个字符串,我将最终升级版本。我关心的是它是否打算在未来的版本中继续工作,或者它是否会“固定”为只读

def float_range_factory(x, y):
    def float_range(z):
        fz = float(z)
        if x<=fz<y:
            return fz
        raise ValueError('input {} must be in the interval [{}, {}]'.format(z, x, y))
    float_range.__doc__ = '[f range] Return float in the interval [{}, {}]'.format(x, y)
    return float_range
def浮动范围工厂(x,y): def浮动范围(z): fz=浮动(z)
如果x标准库中的
functools
模块提供了直接分配给
\uuuuu doc\uuuu
的方法:

class cached_property:
    def __init__(self, func):
        self.func = func
        self.attrname = None
        self.__doc__ = func.__doc__
        self.lock = RLock()

    [...]

但是
foo(3).\uu doc\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
None
的,就好像在运行时动态地定义了
bar

@peterpresco;它并没有什么可怕的永久性。如果您担心升级版本,我认为在python 3.8中对我有效。我认为您的结论是不正确的。从“词法分析”一章中可以看出:“格式化的字符串文本不能用作docstring,即使它们不包含表达式。”;完全忽略f-string可能比试图弄清楚它是否可以在需要的时候进行计算要容易得多(回想起来,我想我说的“编译时”是指“解析时”,但直接引用f-string不能用于docstring比推测更好。)
def foo(x):
    def bar():
        f"""Return {x}"""
        return x
    return bar