sys.modules[__name__].__doc__ 和 __doc__ 总是一样的吗?
Are sys.modules[__name__].__doc__ and __doc__ always the same?
我正在尝试从定义的同一模块中访问模块文档字符串。实际例子:
#!/usr/bin/env python3
"Module docstring that explains what the script does."
import argparse as ap
parser = ap.ArgumentParser(description=__doc__)
...
我一直使用__doc__
,但后来我偶然发现了一些使用sys.module[__name__].__doc__
的代码。这两个对象看起来是一样的,但我想知道它们是否 always 相同。也就是说,就是下面的:
>>> sys.module[__name__].__doc__ is __doc__
True
总是正确的?我可以在示例中安全地使用 __doc__
而不是 sys.modules[__name__].__doc__
吗?
在实践中它们将是相同的,除非您特意使它们不同。
如果您分配给 __name__
那么您可以使表达式引用不同的模块:
"""My doc string"""
import sys
print(__doc__)
__name__='sys'
print(sys.modules[__name__].__doc__)
将打印两个不同的文档字符串。
或者,您可以单独保留 __name__
,但从 sys.modules
中删除您的模块,然后导入具有相同 __name__
的另一个模块(或 Python 2.x 使用 reload()
在编辑文档字符串后重新加载模块)。如果您保留对旧模块中函数的引用,您仍然可以调用它并且 __doc__
将是旧值,而 sys.modules[__name__].__doc__
是新值。
所以它们可能会有所不同,但前提是您努力做到这一点。
我正在尝试从定义的同一模块中访问模块文档字符串。实际例子:
#!/usr/bin/env python3
"Module docstring that explains what the script does."
import argparse as ap
parser = ap.ArgumentParser(description=__doc__)
...
我一直使用__doc__
,但后来我偶然发现了一些使用sys.module[__name__].__doc__
的代码。这两个对象看起来是一样的,但我想知道它们是否 always 相同。也就是说,就是下面的:
>>> sys.module[__name__].__doc__ is __doc__
True
总是正确的?我可以在示例中安全地使用 __doc__
而不是 sys.modules[__name__].__doc__
吗?
在实践中它们将是相同的,除非您特意使它们不同。
如果您分配给 __name__
那么您可以使表达式引用不同的模块:
"""My doc string"""
import sys
print(__doc__)
__name__='sys'
print(sys.modules[__name__].__doc__)
将打印两个不同的文档字符串。
或者,您可以单独保留 __name__
,但从 sys.modules
中删除您的模块,然后导入具有相同 __name__
的另一个模块(或 Python 2.x 使用 reload()
在编辑文档字符串后重新加载模块)。如果您保留对旧模块中函数的引用,您仍然可以调用它并且 __doc__
将是旧值,而 sys.modules[__name__].__doc__
是新值。
所以它们可能会有所不同,但前提是您努力做到这一点。