三引号字符串是一个大字符串。在它们内部没有进行任何评估。该%
部分是字符串的所有部分。你需要让它在实际的字符串上运行。
def func(animalType):
"""
This is a sample function.
@param animalType: "It takes one of these animal types %(ANIMAL_TYPES)s"
""" % {'ANIMAL_TYPES': ANIMAL_TYPES}
不过,我不确定这是否会正常工作;文档字符串有点神奇。
这行不通;docstring 在编译时被评估(作为函数中的第一条语句,因为它是一个字符串文字——一旦它得到%
它,它就不仅仅是一个字符串文字),字符串格式化发生在运行时,所以__doc__
将为空:
>>> def a(): 'docstring works'
...
>>> a.__doc__
'docstring works'
>>> def b(): "formatted docstring doesn't work %s" % ':-('
...
>>> b.__doc__
>>>
如果您想以这种方式工作,则需要func.__doc__ %= {'ANIMAL_TYPES': ANIMAL_TYPES}
在定义函数之后进行。python -OO
请注意,如果您不检查__doc__
已定义的内容,那么这将中断,因为-OO
剥离文档字符串。
>>> def c(): "formatted docstring works %s"
...
>>> c.__doc__
"formatted docstring works %s"
>>> c.__doc__ %= 'after'
>>> c.__doc__
"formatted docstring works after"
无论如何,这不是标准技术。标准技术是引用适当的常量:“采用 ANIMAL_TYPES 中的一种动物类型”,或类似的。