接上文,Python中函數入門,有關内置函數及定義。
今天,我們一起看看函數的調用。
四、函數調用(Function invoke)
函數必須先定義再調用,可以一次定義多次使用。切不可先寫調用後寫
1、調用格式
1接收變量 = 函數名(實參值清單…)
如果有位置參數,則必須傳入實參必;
如果有傳回值,可以接收,也可以不接收,看你是否需要這個值,一般我們對有傳回值的都接收。但是接收了沒有傳回值的函數,則值為None;唯一的NoneType類型的執行個體。
如:兩個函數定義
1
調用如下:
1
2、調用順序
調用之前確定函數已經定義了,函數一旦定義了,就可以被多次調用,還可以導入其他子產品使用。調用的順序與定義的順序無關。代碼執行是從上往下的執行。
1
3、執行順序
函數需要先定義再使用,函數被調用時,進去函數執行,函數執行結束或者遇到return執行結束,将傳回值傳回,同時交出執行權給調用處。葉落歸根。

1
4、實參能被函數修改嗎?
有一個清單,能否利用自定義的函數對其直接修改?
有一個字典,能否利用自定義的函數對其删除某個鍵值對?
1
執行結果:
1函數執行前: [
那若是實參是不可變類型能通過函數修改内容嗎?
哈哈,這個問題其實蠢爆了,不可變類型肯定沒法修改内容,我們隻能修改對應變量的指向,與修改内容完全無關。
5、嵌套調用
嵌套調用就是類似數學裡的綜合式,比如下面的這種:
1t =
我們可以直接這樣寫:
1t =
試想一下,我們現在的生活的衣食住行,是否都是自己自給自足的,顯然分出出現以後我們大部分要依賴外界提供對吧,那麼若是我麼你的生活就是一個函數,那麼衣食住行我們就把功能外包給其他人,想吃飯調用一下餐館的就餐功能或者函數,是以我們的生活處處都是函數的嵌套,我們都是站在巨人的肩膀上,要記住,我們要站在巨人的肩膀上,而不是什麼都從頭造,否則很難從石器時代走出來。
我們現在有一個主邏輯是實作登入操作,使用者名與密碼正确進入系統,錯誤拒絕登入,但是還有一個判斷邏輯,就是使用者名和密碼不能為空功能,我們要讓函數做分工,一個函數登入,一個函數校驗輸入内容。
1
6、遞歸
引用或者調用自身的函數稱為遞歸函數。遞歸結構包括兩個部分:
遞歸頭:函數執行的最小可能性問題,也就是什麼時候結束引用自身;
遞歸體:引用自身。
/# 使用遞歸 實作階乘
1
1
二分法查找(binary search),又叫折半查找。就我我們過去的猜數字遊戲,在[0,100]之間,才生成的随機整數,我們首先會猜50,減少一般的可能性,若是此時大了,我們猜75,又減少了一般的可能性,一步一步縮小範圍,最多經過7次就可以定位這個值。LogN以2為底,log2(N)不大于7。我們分析一下如何用遞歸實作:
遞歸頭:如果上下限相同,那麼就是數字位置所在
遞歸體:找到區間的中間點,查找數字在左側還是右側,繼續查找所在那半部分
注意:二分法查找隻能在有序的序列中使用。
1
遞歸會占用大量的堆棧儲存現場,記憶體消耗極大,層次多較慢,慎重使用,但是遞歸的思想極好,不單單可以用來程式設計,管理的思路也是如此。
在視訊裡尋找更清晰的答案
函數的調用
函數的嵌套調用