为何f-string会阻止函数获取__doc__属性?
为什么f-string会阻止函数获取
__doc__属性? 先看两个示例函数:
def foo(): ("abc" "def") def bar(): ("abc" f"def")
运行后会出现这样的结果:
>>> bar.__doc__ >>> foo.__doc__ 'abcdef'
函数foo的__doc__属性值为'abcdef',但bar的__doc__属性却是None。
原因其实很直接:
- Python的规则是,函数体内第一个表达式如果是静态字符串字面量(包括多行隐式拼接的普通字符串),会自动被当作函数的文档字符串,赋值给
__doc__属性。foo里的两个普通字符串属于静态字面量,Python在编译阶段就能完成拼接,所以把这个结果当成了文档字符串。 - 而f-string是需要运行时计算的动态表达式,不属于静态字符串字面量范畴。当
bar的第一个表达式里包含f-string时,整个表达式不再是单纯的静态字符串,Python不会把它识别为文档字符串,因此bar.__doc__保持默认的None值。
内容的提问来源于stack exchange,提问作者no step on snek
相关产品推荐
相关产品推荐

