为什么 Python 忽略评论缩进?
Why does Python ignore comment indentation?
显然,这:
def f():
pass
# maybe the function is over
pass # oh wait, it's not
f()
是有效语法,而这不是:
def f():
pass
''' maybe the function is over '''
pass # oh wait, it's not
f()
这对我来说是一个巨大的惊喜。所以我的问题是:
- 为什么?为什么 Python 不认为第一个版本是语法错误?
- PEP8 中有什么建议不要这样做吗?
是的,第一个是有效的,因为它以 #
开头,它在语言中定义为注释行,因此它被忽略并且它的缩进不会结束函数或开始新的函数。
后者不同,它是一个评估过的字符串,但它的值从未被使用过,你可以用它来实现多行注释,但解释器仍然会尝试将该字符串评估为代码,所以这个字符串的缩进很重要给解释器,它可能会结束作用域。
第二个写类似
'''comment''''
解释器的代码与此
一样多
my_var = '''comment'''
但是这个
# comment
被忽略并且不是解释器的代码。
显然,这:
def f():
pass
# maybe the function is over
pass # oh wait, it's not
f()
是有效语法,而这不是:
def f():
pass
''' maybe the function is over '''
pass # oh wait, it's not
f()
这对我来说是一个巨大的惊喜。所以我的问题是:
- 为什么?为什么 Python 不认为第一个版本是语法错误?
- PEP8 中有什么建议不要这样做吗?
是的,第一个是有效的,因为它以 #
开头,它在语言中定义为注释行,因此它被忽略并且它的缩进不会结束函数或开始新的函数。
后者不同,它是一个评估过的字符串,但它的值从未被使用过,你可以用它来实现多行注释,但解释器仍然会尝试将该字符串评估为代码,所以这个字符串的缩进很重要给解释器,它可能会结束作用域。
第二个写类似
'''comment''''
解释器的代码与此
一样多my_var = '''comment'''
但是这个
# comment
被忽略并且不是解释器的代码。