为什么 Python 会忽略注释缩进?

Rei*_*ien 0 python whitespace comments indentation

显然,这:

def f():
    pass
# maybe the function is over
    pass  # oh wait, it's not

f()
Run Code Online (Sandbox Code Playgroud)

是有效的语法,而这不是:

def f():
    pass
''' maybe the function is over '''
    pass  # oh wait, it's not

f()
Run Code Online (Sandbox Code Playgroud)

这对我来说是一个巨大的惊喜。所以我的问题是:

  • 为什么?为什么 Python 不认为第一个版本是语法错误?
  • PEP8 中是否有任何建议不要这样做?

kar*_*mad 5

是的,第一个是有效的,因为它以#语言中定义的注释行开头,因此它被忽略并且它的缩进不会结束函数或开始新的函数。

后者是不同的,它是一个被评估的字符串,但它的值从未被使用过,你可以使用它来实现多行注释,但解释器仍然会尝试将该字符串评估为代码,所以这个字符串的缩进对解释器很重要,它可以结束范围。

对于第二个写类似的东西

'''comment''''
Run Code Online (Sandbox Code Playgroud)

对解释器来说是一样多的代码

my_var = '''comment'''
Run Code Online (Sandbox Code Playgroud)

但是这个

# comment
Run Code Online (Sandbox Code Playgroud)

被忽略并且不是解释器的代码。