2013-08-30 40 views
0

今天我下載了一個python來做一些簡單的測試,對我來說奇怪的是python的if-else語句沒有括號。python如何知道該語句屬於if-else的哪個分支?

那麼如何證明一個語句屬於哪個分支?在我的測試中,當我更改縮進時,結果不同。 (b = b * 2)這是否意味着python根據用戶的編碼風格確定語句?那麼如果用戶不遵循縮進規則?

a = 10 
b = 20 

i = 0 

while i<5 : 
    if (a < 9) : 
     if (a < 5) : 
      b = b - 1 
     else : 
      b = b + 1 
    b = b*2 
    a = a - 1 
    i = i + 1 
    print (a, b, i) 

a = 10 
b = 20 

i = 0 

while i<5 : 
    if (a < 9) : 
     if (a < 5) : 
      b = b - 1 
     else : 
      b = b + 1 
      b = b*2 
    a = a - 1 
    i = i + 1 
    print (a, b, i) 
+6

Python使用縮進來分隔塊的起源額外的故事。縮進不只是風格,它是一個要求。 –

+1

你可以放棄'if'測試表達式的括號;它們不是必需的,它們降低了可讀性。 – user4815162342

+0

不要試圖通過反覆試驗來學習語言,並在這裏提問。閱讀一本關於這個主題的好書。這只是關於每本Python書所涵蓋的第一個主題。 –

回答

1

縮進是Python語法的一部分。

丟棄壓痕是丟棄在C { }沒有什麼不同(即你結束了損壞或不正確的代碼)

爲什麼?這個問題是在Design and History FAQ回答,

吉多·範羅蘇姆認爲使用縮進分組是 非常優雅,並有助於大量平均 Python程序的清晰度。大多數人在一段時間後會學會喜歡這個功能。

由於沒有開始/結束括號,在解析器和人類閱讀器所感知的分組之間不能有分歧 。 偶爾C程序員會遇到的代碼片段像 這樣的:如果條件爲真,但 縮進導致你不得不相信執行

if (x <= y) 
     x++; 
     y--; 
z++; 

只有X ++語句。即使經驗豐富的程序員也會長時間盯着它,想知道爲什麼y是 即使對於x> y也是遞減的。

因爲沒有開始/結束括號,所以Python不太容易出現 編碼風格的衝突。在C中,有很多不同的方法可以將大括號置於 之間。如果您習慣於閱讀和編寫使用一種 風格的代碼,則在閱讀時(或者需要編寫另一種風格時需要 ),您會感到至少有點不安。

許多編碼風格將自己的開始/結束括號放在一行上。 這使得程序相當長,浪費寶貴的屏幕空間,使得很難獲得對程序的良好概述。理想情況下, 函數應該適合一個屏幕(比如20-30行)。 20行 Python可以完成比20行C多得多的工作。由於缺少開始/結束括號,這不僅僅是 --缺少聲明和高級數據類型也是負責任的 - 但是 基於縮進的語法有一定的幫助

另外,History of Python大約有壓痕語法

+0

在verilog/systemverilog中,我們使用「begin..end」,在C或Perl中我們使用「{}」,現在Python正在使用縮進。聽起來不錯,我只需要習慣它:) – sean

+0

@sean:一旦你這樣做,你就不會回頭。 –

4

那麼如何,如果用戶不按照縮進規則?

編碼器必須遵循正確的縮進。唯一的其他選擇是代碼無法正常工作(或偶然工作,但本身並不是真正的選擇)。

+0

這不完全正確。 – Noelkd

0

這就是爲什麼在if語句後放上一個冒號。在那之後,你做了我所稱的'縮進',基本上你在下一行之後放置了一個空格(或者你想要多少空格),然後在if語句中鍵入你想要運行的代碼。如果你不插入空格,那麼python會出現一個錯誤,因爲你添加了一個if語句,所以它期望你有某種縮進。 例如:

if 4<7: 
print("Hello") 

此外,沒有縮進規則。它可以是任意多行,但一般來說,因爲您希望代碼能夠被人類讀取,所以我會縮進任何代碼的最大空格爲4.

+0

謝謝,現在我的理解是,編譯器設計爲期望除縮寫以外的其他縮進。它是python,我們需要遵循一些基本規則,如果我們想正確使用它:-) – sean