2013-09-28 149 views
0

我一直在學習Python有些日子了。但是,我不明白收益。我從我的教科書和在線閱讀了幾個解釋;他們不幫忙!返回做什麼?什麼都沒有返回

也許有人可以用以簡單的方式解釋返回是什麼? 我已經寫了幾個有用的(對我來說)Python腳本,但我從來沒有使用return,因爲我不知道它是什麼。

您能否提供一個簡單的示例,說明爲什麼要使用返回?

也顯得無可奈何:

def sqrt(n): 
    approx = n/2.0 
    better = (approx + n/approx)/2.0 
    while better != approx: 
     approx = better 
     better = (approx + n/approx)/2.0 
    return approx 

sqrt(25) 

我的書告訴我:「嘗試調用與25這個函數作爲參數,以確認其返回5.0」

我知道如何檢查這個的唯一方法是使用print。但我不知道這是他們想要的。這個問題只是說與25打電話。它沒有說增加任何更多的代碼,以確認它返回5.0。

+3

'A =開方(25);打印的(a);' – rlms

回答

4

return返回從函數的值:

def addseven(n): 
    return n + 7 

a = 9 
b = addseven(a) 
print(b)  # should be 16 

它也可以用來退出功能:

def addseventosix(n): 
    if n != 6: 
     return 
    else: 
     return n + 7 

然而,即使你沒有在一個return聲明函數(或者您使用它而不指定要返回的值),該函數仍會返回一些內容 - None

def functionthatisuseless(n): 
    n + 7 

print(functionthatisuseless(8))  # should output None 

有時您可能想要從函數返回多個值。但是,不能有多個return語句 - 控制流在第一個語句之後離開函數,所以後面的任何語句都不會執行。在Python中,我們通常使用一個元組,而元組拆包:

def addsevenandaddeight(n): 
    return (n+7, n+8)  # the parentheses aren't necessary, they are just for clarity 

seven, eight = addsevenandaddeight(0) 
print(seven)  # should be 7 
print(eight)  # should be 8 

return聲明是什麼讓你呼籲其他功能結果的功能:

def addseven(n): 
    return n+7 

def timeseight(n): 
    return n*8 

print(addseven(timeseight(9)) 

# what the intepreter is doing (kind of): 
# print(addseven(72)) # 72 is what is returned when timeseight is called on 9 
# print(79) 
# 79 
2

您可能需要添加print或將整個事情寫入交互式解釋器來查看返回值。

return可以從某個函數中獲得某些輸出/結果。這個值在後面的代碼,你必須把它分配給一個變量:

a = sqrt(25) 
0

你的課本希望你嘗試在interactive interpreter,這表明,當你進入他們你重視的事。下面是一個示例:

$ python 
Python 2.7.5+ (default, Sep 17 2013, 17:31:54) 
[GCC 4.8.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> def sqrt(n): 
...  approx = n/2.0 
...  better = (approx + n/approx)/2.0 
...  while better != approx: 
...   approx = better 
...   better = (approx + n/approx)/2.0 
...  return approx 
... 
>>> sqrt(25) 
5.0 
>>> 

這裏關鍵的是表達式和​​語句之間的區別。 def是一個聲明,並沒有結果。塊定義的sqrt是一個函數;而函數總是產生一個返回值,這樣它們就可以用在表達式中,如sqrt(25)。如果您的函數不包含returnyield,則此值爲None,解釋程序忽略此值,但在此情況下,sqrt會返回一個自動打印的數字(並存儲在名爲_的變量中)。在腳本中,您可以用print sqrt(25)替換最後一行以將輸出提供給終端,但返回值的有用之處在於您可以進行進一步處理,例如root=sqrt(25)print sqrt(25)-5

如果我們要像腳本一樣運行完全相同的行,而不是在交互模式下,則不會出現隱式打印。行sqrt(25)被接受爲表達式的語句,這意味着它被計算 - 但是然後該值被簡單地丟棄。它甚至沒有進入_(這與計算器的Ans按鈕相同)。通常情況下,我們將這個用於導致副作用的函數,如quit(),這會導致Python退出。

順便說一下,print是Python 2中的一個語句,但是是Python 3中的一個函數。這就是爲什麼越來越多的使用它有括號。

這裏是一個腳本,它依賴於sqrt(在這種情況下Python的自己的版本)返回值:

from math import sqrt 
area = float(raw_input("Enter a number: ")) 
shortside = sqrt(area) 
print "Two squares with the area", area, "square meters,", 
print "placed side to side, form a rectangle", 2*shortside, "meters long", 
print "and", shortside, "meters wide"