Python基礎之函數,遞迴。

來源:互聯網
上載者:User

標籤:play   oca   gif   turn   bsp   display   image   預設參數   數學函數   

一.數學定義的函數與python中的函數

  - 初中數學函數定義:一般的,在一個變化過程中,如果有兩個變數x和y,並且對於x的每一個確定的值,y都有唯一確定的值與其對應,那麼我們就把x稱為自變數,把y稱為因變數,y是x的函數。自變數x的取值範圍叫做這個函數的定義域

  - python中函數定義:函數是邏輯結構化和過程化的一種編程方法。

 

二. 為何使用函數

  1.解決代碼重用

  2.保持一致性,易維護

  3.可擴充性

 

三. 函數參數

  1.形參:形參變數只有在被調用時才分配記憶體單元,在調用結束時,即刻釋放所分配的記憶體單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變數,形參不佔用記憶體空間。

  2.實參:可以是常量、變數、運算式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。實參佔用記憶體空間。

 

   3.位置參數和關鍵字:

    位置參數形參和實參的位置須一一對應,關鍵字:位置無需固定

  4.預設參數:

    已經在形參中定義好的,無須在實參中再賦值

  5.參數組:

    *args 可以進行列表的賦值  **kwargs 可以進行字典的賦值

 

四. 局部變數與全域變數

  1.在子程式中定義的變數稱為局部變數,在程式的一開始定義的變數稱為全域變數。

  2.全域變數範圍是整個程式,局部變數範圍是定義該變數的子程式。

  3.當全域變數與局部變數同名時:在定義局部變數的子程式內,局部變數起作用;在其它地方全域變數起作用。

 

五. 前向引用之‘函數即變數‘

  函數就如同變數的定義,在定義變數時,須先在硬碟中開闢一塊空間來儲存變數,而函數也是如此,再定義函數時也須在硬碟中開闢一塊空間來儲存函數,在要用時調出來用。

  在運行函數時,雖然你調用的函數可能已經在下面寫好,但程式還沒運行到那一步,硬碟中還未建立該函數的內容,因此你在之前調用該函數時程式就會出錯。

   

六. 嵌套函數

  沒錯,函數還可以一層一層嵌套。

name = "阿貓"def n1():    name = "阿狗"    def n2():        nonlocal name        name = "alex"    n2()    print(name)print(name)n1()print(name)

  最後輸出的結果是什麼呢?

 

八 遞迴

  在函數內部,可以調用其他函數。如果一個函數在內部調用自己本身,那這個函數就是遞迴函式。

def calc(n):    print(n)    if int(n/2) ==0:        return n    return calc(int(n/2)) calc(10) 輸出:10521
import  timeperson_list=[‘alex‘,‘wupeiqi‘,‘linhaifeng‘]def ask_way(person_list):    print("-"*60)    if len(person_list) == 0:        return ‘沒人知道‘    person = person_list.pop(0)    if person == ‘linhaifeng‘:        return ‘%s說:我知道,老男孩就在沙河匯德商廈,下地鐵就是‘ % person    print(‘hi 美男[%s],敢問路在何方‘ % person)    print(‘%s回答道:我不知道,但念你慧眼識豬,你等著,我幫你問問%s...‘ % (person, person_list))    time.sleep(1)    res = ask_way(person_list)    print(‘%s問的結果是: %res‘ % (person, res))    return resres = ask_way(person_list)print(res)
遞迴問路

遞迴特性:

1. 必須有一個明確的結束條件

2. 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少

3. 遞迴效率不高,遞迴層次過多會導致棧溢出(在電腦中,函數調用是通過棧(stack)這種資料結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴調用的次數過多,會導致棧溢出)

 

Python基礎之函數,遞迴。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.