<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 4.2.6 函數的返回值 函數作為一種模塊構件,它與其他模塊如何協作、交換信息?我們已經知道,通過函數 調用時的參數傳遞,可以實現從函數外部向函數內部輸入數據。本節討論函數向外部輸出信 息的問題。 在數學中,函數是從定義域到值域的映射,亦即從自變量計算出函數值。編程語言中的 函數原本就是數學函數的模仿物,自然也可以計算出一個結果輸出給函數調用者,我們稱函 數輸出的計算結果為函數的返回值(returned value)。 在前面幾章中,我們已多次使用過具有返回值的內建函數和庫函數。例如,內建函數 len() 能夠接收一個字符串,然后返回該字符串的長度;數學庫中的函數 math.sqrt()接收一個 數值,并返回該數值的平方根。我們還看到,帶有返回值的函數基本上可以當作一個值來看 待,可以和其他數據一起進行運算,構成表達式。例如: ``` (-b + math.sqrt(b*b – 4*a*c)) / 2*a range(len("hello")) x = input("Enter a number:") ``` 如何自定義帶有返回值的函數呢?Python 語言提供了一條 return 語句用于從函數返 回值,用法如下: ``` def f(): ... return <表達式 1>, ..., <表達式 n> ... ``` 其語義是:當 Python 在執行函數 f()時,一旦遇到 return 語句,就終止執行函數,并將 控制返回到函數調用點,同時將各表達式的計算結果返回給調用者。 與 Python 內建函數、庫函數一樣,帶返回值的用戶自定義函數可以像一個普通的數據 值一樣使用,例如用在表達式中參加運算(當然要求數據類型合法)或者作為賦值語句的右 端為變量賦值。 例如,下面的函數實現了數學函數 f(x) = x2 的功能: ``` >>> def sq(x): return x * x >>> sq(2) 4 >>> print sq(3) + 1 10 >>> a = 4 >>> b = sq(a) >>> print b 16 ``` 再看一個例子,下面的 dist()函數能夠計算平面上兩點間的距離。我們將平面上的點 表示為由橫坐標和縱坐標組成的元組(x,y)。根據數學中的距離公式,并利用上面的 sq() 函數,可以寫出如下代碼: ``` >>> import math >>> def dist(u,v): d = math.sqrt(sq(v[0]-u[0])+sq(v[1]-u[1])) return d >>> dist((0,0),(4,0)) 4.0 >>> dist((0,0),(0,5)) 5.0 >>> dist((0,0),(1,1)) 1.4142135623730951 >>> dist((1,2),(3,4)) 2.8284271247461903 ``` 如果函數返回值有多個,那么調用者需要使用多個變量來接收函數的返回值。例如下面 的函數 headtail()對一個列表取出頭尾元素: ``` >>> def headtail(list): return list[0], list[len(list)-1] >>> headtail([1,2,3,4,5]) (1, 5) ``` 調用 headtail 這種返回多個值的函數時,調用者可以利用多變量同時賦值語句來接 收多個返回值,也可以只用一個變量來接收返回值,因為函數返回的“多個值”實際上構成 一個元組。 ``` >>> h,t = headtail([1,2,3,4,5]) >>> print h,t 1 5 >>> v = headtail([1,2,3,4,5]) >>> v (1, 5) ``` 函數中的 return 語句通常都出現在函數的末尾,因為函數一般都是執行完所有步驟 之后才能得出計算結果并返回。然而,有時我們希望在函數到達末尾之前就終止執行并返回, 例如當函數檢測到不正確的數據時就沒有必要繼續執行,因為計算下去只能帶來錯誤結果。 下面這個例子檢查用戶輸入(要求是正數),如果不滿足要求則退出函數,否則對用戶數據 進行處理。代碼如下: ``` >>> def f(x): if x <= 0: print "Positive numbers only, please." return y = x ** 3 return y >>> f(0) Positive numbers only, please. >>> f(2) 8 ``` 最后要說明一點,在 Python 中,任何函數無論是否包含 return 語句,總是要返回一個值的。如果包含 return 語句,自然就返回程序員指定的值;如果不含 return 語句, 則函數總是返回一個稱為 None 的特殊對象。如果編程時忘記在函數中用 return 語句返回 值,而調用處又企圖使用返回值,則可能出錯。例如,假設上面定義的 dist()函數忘了最 后的 return 語句,我們看會帶來什么后果: ``` >>> import math >>> def dist(u,v): d = math.sqrt(sq(v[0]-u[0])+sq(v[1]-u[1])) >>> print dist((0,0),(2,2)) None >>> print 2 + dist((0,0),(2,2)) Traceback (most recent call last): File "<pyshell#42>", line 1, in <module> print 2 + dist((0,0),(2,2)) TypeError: unsupported operand type(s) for +: 'int' and 'NoneType' ``` 可見調用 dist()后得到的結果是 None;如果將這個 None 用于表達式中(例中是與 2 相 加)則可能出錯,因為對 None 對象并沒有定義加法運算。對初學 Python 編程的人來說, 這是容易犯錯的地方,所以一定要注意返回值。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看