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'()'的文檔字符串,看看內存泄漏消失? –