Python的语法在语言参考中进行了解释。相关配件有:
7.7 Function definitions
...
funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite
...
所以,对于一个函数的语法是所有的东西到结肠,随后suite
。
7. Compound statements
...
suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
...
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
...
所以一个suite
可以是stmt_list
或含有至少一个statement
...和一个stmt_list
只是一堆由分号在一行连接simple_stmt
块的缩进块。
最后:
6. Simple statements
simple_stmt ::= expression_stmt
| assert_stmt
...
这表明,simple_statement
可以是任意表达式,或者assert
或任何其他在名单上。
您可以点击这些页面上的链接进一步探索。一个expression_stmt
只是本身评估的任何表达,如:
dir
2
"cat"
int()
这是一个完全有效的Python程序,将解析和运行,即使什么都不做。
函数的文档字符串也是一个表达式。这只是一个恰好被系统处理的字符串。
不过,特殊处理不是语法的一部分。它发生在另一个阶段,在解析器构建其抽象语法树很久之后。
我会寻求其他的内存问题... :)
是不是很简单的在'测试添加一个'pass'()'的文档字符串,看看内存泄漏消失? –