簡體   English   中英

為什么兩個函數的返回語句的不同縮進不會產生不同的結果?

[英]Why doesn't the different indentation of two functions' return statements produce different results?

我被要求編寫一個Python函數來確定列表是否已排序。 我有兩個版本:

def is_sorted(t):
    for i in range(len(t) -1 ):
        if t[i] <= t[i + 1]:
            return True
        return False

def is_sorted(t):
    for i in range(len(t) -1 ):
        if t[i] <= t[i + 1]:
            return True
    return False

這兩者有什么區別? 我在第一個縮進時return False 但是,它們都產生相同的結果。 它們之間有任何明顯的差異嗎?

這些都不符合你的要求。 隨着第一,只有前兩個項目進行比較,因為你return在循環的第一次迭代,從而不管前兩個項目是否(雖然你返回在這些情況下,不同的結果)。 for循環並沒有真正做任何事情。 對於第二個項目,只有在它們出現故障時才會繼續比較項目,因為您在第一次看到有序的對時從函數返回。

你想要的是當物品亂序時立即返回False (因為一旦你發現一對物品亂序,你知道列表沒有排序而且不需要再檢查)並且只在對是順序返回True您已檢查所有項目之后。 像這樣:

def is_sorted(t):
    for i in range(len(t) - 1):
        if t[i] > t[i + 1]:
            return False
    return True

或者,使用Python的內置all()函數和生成器表達式:

def is_sorted(t):
    return all(t[i] <= t[i + 1] for i in range(len(t) - 1))

你應該考慮縮進的影響 - 即你的return False語句屬於什么阻止。

  • 在前一種情況下,當您第一次以升序方式排序兩個元素時,您的函數將返回False
  • 在后一種情況下,當所有元素按升序排序時,函數將返回False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM