为何导入模块后Python文件的__doc__会被设为None?
问题原因解析
这是Python对模块文档字符串(__doc__)的定义规则导致的:
- Python规定,模块的文档字符串是模块中第一个非注释、非空行的语句,且必须是字符串字面量,这个字符串会被自动赋值给模块的
__doc__属性。 - 在第一个示例中,开头的多行字符串是模块的第一个有效语句,所以被识别为模块文档字符串,
__doc__自然会指向它。 - 在第二个示例中,
import sys是模块的第一个有效语句,后面的多行字符串不再是模块的第一个语句,因此不会被当作模块文档字符串。此时模块没有定义符合规则的文档字符串,__doc__就保持默认的None。
你可以做个验证:如果把字符串放在import语句前面,比如:
""" This here is a docstring """ import sys print(f'Doc=[{__doc__}]')
运行后会输出:
Doc=[ This here is a docstring ]
这就印证了规则——只有模块最开头的字符串字面量才会被当作__doc__。
内容的提问来源于stack exchange,提问作者Bulletmagnet
相关产品推荐
相关产品推荐

