python 縮排問題

pursuer.chen發表於2016-07-20

介紹

在python中認為規定4個空格縮排,縮排的程式碼可以理解成一個塊,但是使用縮排也需要注意有時不一樣的縮排產生的結果會不一樣,接下來就來看一個列子
 
 
一、for...in迴圈 
例:自定義一個函式 ,最後返回傳入值的平方相加
def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
print (calc([1,2,4]))
上面的程式碼返回了正常在值:21
 
接下來把程式碼稍微改一下
def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
        return sum
print (calc([1,2,4]))

現在返回的值又是什麼呢:結果返回1

為什麼會返回1,仔細分析一下,程式碼我將return進行了縮排,這時return是基於for的每一個迴圈返回一個值,並且return當第一個條件滿足時就不在往下執行了,所以當傳入第一個1時,sum=0+1*1=1,return 1就不再進行後面的迴圈了。而return不縮排那麼return和for是同一級,當所有的for執行完後才執行return然後返回最終的結果

用將return替換成print更容易理解

def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    print (sum)
print (calc([1,2,4]))
21
None
>>> 

而縮排print

def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
        print (sum)
print (calc([1,2,4]))
1
5
21
None
>>> 

由於prInt不像return不會滿足條件就不往下執行,所以列印出了每一次迴圈的值。

二、if..else

在if..else條件判斷中,一個塊裡面的語句都要保持縮排

def my_abs(x):
    if x>=0:
        x=x-1
        return (x)
    else:
        x=x+1

在這裡return就必須縮排,如果和if保持一樣的話會導致後面的else定義失敗,因為if...elif..else需要保持一致縮排。

如果這樣寫就錯了:

def my_abs(x):
    if x>=0:
        x=x-1
    return (x)
    else:
        x=x+1

由於return和if..else處於一樣的縮排,導致else關聯不上if

總結

 使用縮排要明白每一行縮排的意義,否則返回的結果可能不是正確的結果

 

 

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。

《歡迎交流討論》

相關文章