python 縮進問題


介紹

在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

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

《歡迎交流討論》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM