Python基礎之白話說函數

轉自白月黑羽Python3教程之函數:http://www.python3.vip/doc/tutorial/python/0005/python

什麼是函數

人類語言裏面,咱們不只會給人和物起名字, 好比 小張, 足球, iphone面試

有時候,咱們還要給 一件事情,一串動做起名字,指代 某個流程。編程

好比:咱們公司的面試流程是iphone

把求職者帶到3號會議室
請求職者 完成答卷
讓測試經理來面試 求職者
讓技術總監面試 求職者

咱們會把上面這 一連串的事情,起名叫 面試流程。函數

面試流程就表明了這一串動做。學習

之後,咱們想告訴 HR 給誰面試的時候,只要說,走面試流程 ,就好了。測試

不須要說, HR ,請你作以下的事情對象

把求職者帶到3號會議室
請求職者 完成答卷
讓測試經理來面試 求職者
讓技術總監面試 求職者

  

大家會這麼說嗎?blog

不會,由於這樣太麻煩了。我給它起名字面試流程,只要走 面試流程,HR 天然知道是什麼意思。這樣就方便多了。教程

函數定義


一樣的道理,在編程上,若是我要屢次輸出面試的流程,就像下面的代碼,

print("把求職者帶到3號會議室")
print("請求職者 完成答卷")
print("讓測試經理來面試 求職者")
print("讓技術總監面試 求職者")

  

每次都所有寫一遍太煩了, 就能夠定義一個名字來表明要執行這四條語句

定義一個名字 對應多個語句操做, 稱之爲定義函數

因此:定義函數 就好像是給 一段代碼 起了個名字

Python中,咱們是這樣定義函數的:

def interview():
 print("把求職者帶到3號會議室")
 print("請求職者 完成答卷")
 print("讓測試經理來面試 求職者")
 print("讓技術總監面試 求職者")

  

def 是關鍵字 表示定義一個函數,後面是函數的名字,緊接着後面須要一個括號 ,這個括號中間,根據須要還能夠有n個參數,這裏咱們先不講它。最後是一個冒號,下面的縮進的代碼表示這個函數名字表明的具體動做是什麼,稱之爲函數體。

函數體的代碼是須要縮進的。咱們建議縮進四個空格。

函數調用

這樣定義好了之後,後面的代碼要指代這個面試的流程,只須要寫名字 interview 就好了。 好比:

print(interview)

運行一下,發現會輸出內容以下

<function interview at 0x05292468>

表示這個 interview 是 一個函數類型的對象。

特別要注意的是,解釋器執行代碼的時候,執行到定義函數的代碼,並不會執行函數體裏面的代碼。 要執行函數體裏面的代碼,必須調用函數。

Python中調用函數的語句,就是在 函數名後面加上括號。好比,要執行 interview 這個名字表明的動做,就在後面加上括號 interview()

以下:

interview()
print('後續代碼')

interview() 就叫 調用函數 interview ,有時也叫作 執行函數 interview。

要注意的是,當解釋器執行完被調用函數內部的代碼後,還會返回到調用它的代碼處,繼續執行後面的代碼。上面的例子裏面,就是在 執行完 interview 對應的函數內部代碼後, 會返回調用處,進行執行後面的 這條語句

print('後續代碼')

你們仔細看看咱們的代碼, 裏面除了有 interview 這個函數,還有什麼函數? 對了print

其實,咱們這裏 print 這個名字 也是一個函數的名字, 表示一個動做就是把裏面的對象 顯示到屏幕上,這個動做實現的具體代碼在哪裏?

python語言的開發者 知道 這是咱們經常使用的操做, 因此在python解釋器內部已經幫咱們實現好了 這樣一個函數, 稱之爲內置函數。

關注我,私信我【Python】,還能夠免費獲取一套精心整理的電子書籍喲!

能夠點擊文章末尾【瞭解更多】,或者百度搜索【白月黑羽】,經過在線教程一塊兒來學Python

函數參數

這個print函數調用的時候,有個和咱們上面定義的 interview 有明顯的不一樣,你們有沒有發現?看看

interview()

print("把求職者帶到3號會議室")

區別在哪裏? 對了,括號裏面有內容。函數調用括號裏面的內容 稱之爲函數的 參數。有的函數要完成功能,須要告訴它一些信息。好比print函數,若是你不告訴它要打印的內容是什麼,它怎麼能打印信息到屏幕上呢?

參數的做用 就是: 提供 函數完成功能 所必須的信息

有參數的函數像這樣

def func(para1,para2):
 ...

函數的參數都是放在函數定義的括號裏面的。好比上面示例代碼中的 para1,para2

參數其實也是一個變量,因此他們的命名規則和變量的命名規則同樣。參數能夠沒有,能夠是一個,也能夠是多個。參數之間用逗號隔開。

調用有參數的函數時,須要傳入對應個數的參數。是一個參數,就傳入一個,兩個就是傳入兩個,咱們上面interview的例子裏面,若是咱們要加上顯示出面試者的名字,就能夠這樣

def interview(interviewee):
 print("求職者是 " + interviewee)
 print("把求職者帶到3號會議室")
 print("請求職者 完成答卷")
 print("讓測試經理來面試 求職者")
 print("讓技術總監面試 求職者")
interview('王小五')

咱們在定義的時候,並不知道未來調用的時候是誰來面試。可是沒有關係。能夠做爲參數,定義在這裏。面試者來了,咱們在調用函數的時候,會將面試者的名字做爲參數傳遞過來。再執行

interview('王小五')

的時候, 解釋器就會到 函數 interview 準備去執行裏面的代碼,而且在執行函數代碼前,會將參數變量interviewee 賦值爲 '王小五'

函數的缺省參數

假設,咱們要實現一個函數,統計學生考試超過指定分數的人數。

def overScoreStudents(studentScoreList, score):
 count = 0
 # 下面的代碼用到了循環和判斷,後面章節會學習到
 for ss in studentScoreList:
 if ss >= score:
 count += 1
 
 return count

在調用這個函數的時候,大部分時候 都是統計超過及格分數線60的人數。像這樣

overScoreStudents(ssList,60)

因此,咱們調用該函數的時候,第二個參數一般都是填寫 60 。這樣顯得就有些麻煩。這時候,能夠在定義函數的時候,給它加上缺省值,像下面這樣:

def overScoreStudents(studentScoreList, score=60):
 ...

這樣,在在調用這個函數的時候,若是score參數仍是傳入60 就能夠不用寫了,像這樣

overScoreStudents(ssList)

解釋器發現該函數參數score有缺省值,就會自動幫咱們傳入缺省值60 給 參數score。固然若是咱們調用的時候傳入了參數,好比像下面這樣,score參數就會將 70 傳給參數score。

overScoreStudents(ssList, 70)
相關文章
相關標籤/搜索