2016-07-15 56 views
0

我的問題是關於這個語句我在線閱讀的內容沿着「if語句後面的行」,並且與「如果陳述「將始終運行,而不管'陳述'是真是假。」我會用下面的例子來展示。在Python中的「if」語句中表現怪異的返回語句

所以我有這個程序需要兩個數字作爲輸入並返回兩個輸入中的較大者。

因此,第一個例子中的第四行和第五行代碼與「if a> b:」縮進級別應該始終按照上面的語句運行。

例子#1

def bigger(a,b): 
    if a>b: 
     x = "the first number is bigger" 
    x = "the second number is bigger" 
    return x 
print bigger(9,7) 

Python的版畫「第二個數字越大,」所以代碼是根據我在一開始寫道,原始語句工作。即使這是錯誤的,因爲9> 7。

但是,在我碰上混亂是當返回語句在下面的示例中被使用:

實施例#2

def bigger(a,b): 
    if a>b: 
     return "the first number is bigger" 
    return "the second number is bigger" 
print bigger(9,7) 

這一次,Python的打印「所述第一數量更大的」這是真的,因爲9> 7

我的困惑:不應該在第二個例子中的第四行代碼,「返回」第二個數字是更大的「」,總是運行,因爲它是在相同的縮進級別的「如果陳述「,就像我們在例子#1中看到的那樣?

看起來代碼中的兩個例子相互矛盾,因爲在例子#1中,Python認識到「第二個數字更大」的行並打印該行,但在例子#2中,Python忽略了「第二個數字更大「行並打印其他」第一個數字更大「的行。

我試圖讓這個儘可能清楚。由於

+0

沒有什麼奇怪的。通過設計返回從Python立即返回函數。 – paisanco

+0

@paisanco謝謝。我從來不知道返回立即返回。我以爲它沒有立即返回,所以當然我感到困惑。你懂得越多! – thedongthrowaway

回答

0

我的困惑:不應該的代碼在第二個例子中的四號線, 「迴歸‘的第二個數字是做大’」,始終運行,因爲它是在的 相同的縮進水平「if語句,「就像我們在 示例#1中看到的那樣?

這是因爲當你有一個return語句,函數執行遊:

def bigger(a,b): 
    if a>b: 
     return "the first number is bigger" # function execution breaks here!!! 
    return "the second number is bigger" 
print bigger(9,7) 
0

你可能想讀一點一點關於功能和手段是什麼回報。 簡而言之,如果執行return語句,函數將超出作用域,並且不會在其後面運行任何內容。

0

在第一示例中,首先將其比較兩個值97和,則x = the first number is bigger,然後將其分配x= the second number is bigger並返回x。這就是你看到這條線的原因。

在第二個例子中,它也比較了兩個值,但它立即返回x,所以它不會進入下一行。

0

我認爲「你讀過的陳述」太簡單了。只有在if語句或以下縮進塊期間沒有任何更改Python的正常控制流程時纔是正確的。如果控制流被改變,它不適用,這正是你在第二個例子中所做的。 return語句會更改控制流,使該函數立即退出,因此if之後的其餘代碼不會運行。

是改變控制流的其他陳述raise(並沒有明確raise聲明待提高,導致異常的無效操作),breakcontinue。後兩者僅在循環中有效。