2016-12-14 63 views
0

爲什麼蟒蛇接受驗證碼:爲什麼python要求文檔字符串縮進?

def is_right_triangle(leg1,leg2,hypotenuse): 
    """function for checking whether or not set of points makes a right triangle""" 
    return leg1 ** 2 + leg2 ** 2 == hypotenuse ** 2 

但在這個代碼,其中的文檔字符串沒有縮進

def is_right_triangle(leg1,leg2,hypotenuse): 
"""function for checking whether or not set of points makes a right triangle""" 
    return leg1 ** 2 + leg2 ** 2 == hypotenuse ** 2 

它拋出一個「預期的縮進塊」的錯誤。

爲什麼python會關心文檔字符串是否縮進?

+0

因爲docstring是一個實際的字符串,縮進在Python中很重要。 –

+0

換句話說,python認爲文檔字符串是函數的一部分。 – Tookie345

+0

這只是一個字符串。當然,它與函數關聯,但重要的是它需要根據Python的語法規則進行分析。 –

回答

4

因爲docstring只是函數中的另一個表達式。它只是以特殊的方式處理,因爲它是一個字符串和第一個表達式。

你也可以看到,通過獲取功能AST:

> a=ast.parse('def f(x):\n "docstring"\n return 0') 
> a.body[0].body 
[<_ast.Expr at 0x7f18bb3e6a20>, <_ast.Return at 0x7f18bb3e6550>] 
> a.body[0].body[0].value.s 
'docstring' 
1

因爲在1990年的蟒蛇一開始,吉多·範羅蘇姆下令,在函數定義的所有語句應縮進和一個字符串是一個表達式語句。

只有GvR才能真正回答這個問題。 Python來自一個名爲ABC的玩具語言。文檔字符串可能已經在ABC中縮進了...

+0

一個字符串*是一個表達式語句。如果你不喜歡它,你可以自由地將#貼在它的前面,並將它變成評論。當然,這不是一個正式的文檔。還有其他語言和/或文檔系統會將某些評論視爲特殊內容,例如#pragma。我更喜歡Python的方式。 – nigel222

+0

@ nigel222我不是說我不喜歡它,我只是說當我們決定docstrings應該有這個語法時,我不知道GvR的所有論點。 ABC可能有一些評論習慣。 – Gribouillis

+0

@Griboulis對不起,過於個人化。我的觀點是,語言的語法意味着docstring是一個定義的表達式語句,就像一行中的字符串本身是代碼中其他任何地方的表達式語句一樣。作爲聲明而不是評論,它必須適當縮進。 – nigel222

相關問題