目錄:
一、建立和呼叫函式
二、函式的引數
三、函式的返回值
四、課時17課後習題及答案
為了使得程式得程式碼變得簡單,就需要把程式分解成較小得組成部分。有三種方法可以實現:函式、物件、模組。
***********************
一、建立和呼叫函式
***********************
此前接觸的BIF就是Python幫我們封裝好的函式。在Python中建立一個函式用def關鍵字。
def myFristFunction(): print("DC love ZWW") print("1314520")
注意:在函式的後面要加上一對小括號哦。這小括號是必不可少的。接下來是函式的呼叫:
>>> myFristFunction()
DC love ZWW
1314520
函式的呼叫和執行機制:當函式myFristFunction()發生呼叫操作的時候,Python會自動往上找到def myFristFunction()的定義過程,倘若沒找到就會報錯。然後依此執行該函式所包含的程式碼塊部分(也就是冒號後縮排的那部分內容)。只需要一條語句,就可以實現函式內的所用功能。
假如,我想把剛才的內容列印3次,我只需要呼叫3次函式即可:
>>> for each in range(3): myFristFunction() DC love ZWW 1314520 DC love ZWW 1314520 DC love ZWW 1314520
******************
二、函式的引數
******************
括號裡放的就是函式的引數。引數就是使得函式可以實現個性化:
>>> def mySecondFunction(name): print(name+"愛ZWW") >>> mySecondFunction("DC") DC愛ZWW >>> mySecondFunction("dc") dc愛ZWW
使用多個引數的時候,只需要用逗號隔開:
>>> def add(name1,name2): print(name1+" love "+name2) >>> add("DC","ZWW") DC love ZWW
那究竟可以多少個引數呢?理論上想要多少個就有多少個。
*********************
三、函式的返回值
*********************
我們的函式要有返回值,只需要在函式中使用關鍵字return,後面就跟著要返回的值。
>>> def add(name1,name2): print(name1+" love "+name2) return "LOVE" >>> add("DC","ZWW") DC love ZWW 'LOVE' >>> def add(name1,name2): print(name1+" love "+name2) return name1 >>> add("DC","ZWW") DC love ZWW 'DC'
*******************************
四、課時17課後習題及答案
*******************************
測試題:
0. 你有聽說過DRY嗎?
答:DRY是程式設計師們公認的指導原則:Don't Repeat Yourself.
快快武裝你的思維吧,拿起函式,不要再去重複拷貝一段程式碼了
1. 都是重複一段程式碼,為什麼我要使用函式(而不使用簡單的拷貝黏貼)呢?
答:
使用函式:
0) 可以降低程式碼量(呼叫函式只需要一行,而拷貝黏貼需要N倍程式碼) 1) 可以降低維護成本(函式只需修改def部分內容,而拷貝黏貼則需要每一處出現的地方都作修改) 2) 使序更容易閱讀(沒有人會希望看到一個程式重複一萬行“I love FishC.com”)
2. 函式可以有多個引數嗎?
答:可以的,理論上你想要有多少個就可以有多少個,只不過如果函式的引數過多,在呼叫的時候出錯的機率就會大大提高,因而寫這個函式的程式設計師也會被相應的問候祖宗,所以,儘量精簡吧,在Python的世界裡,精簡才是王道!
3. 建立函式使用什麼關鍵字,要注意什麼?
答:使用“def”關鍵字,要注意函式名後邊要加上小括號“()”,然後小括號後邊是冒號“:”,然後縮排部分均屬於函式體的內容,例如:
def MyFun(): # 我是函式體 # 我也是函式體 # 我們都屬於函式MyFun() # 噢,我不屬於MyFun()函式的了
4. 請問這個函式有多少個引數?
def MyFun((x, y), (a, b)): return x * y - a * b
答:如果你回答兩個,那麼恭喜你錯啦,答案是0,因為類似於這樣的寫法是錯誤的!
我們分析下,函式的引數需要的是變數,而這裡你試圖用“元祖”的形式來傳遞是不可行的。
我想你如果這麼寫,你應該是要表達這麼個意思:
>>> def MyFun(x, y): return x[0] * x[1] - y[0] * y[1] >>> MyFun((3, 4), (1, 2)) 10
5. 請問呼叫以下這個函式會列印什麼內容?
>>> def hello(): print('Hello World!') return print('Welcome To FishC.com!')
答:會列印:
>>> hello()
Hello World!
因為當Python執行到return語句的時候,Python認為函式到此結束,需要返回了(儘管沒有任何返回值)。
動動手:
0. 編寫一個函式power()模擬內建函式pow(),即power(x, y)為計算並返回x的y次冪的值。
解:
def power(x, y): result = 1 for i in range(y): result *= x return result print(power(2, 3))
1. 編寫一個函式,利用歐幾里得演算法(腦補連結)求最大公約數,例如gcd(x, y)返回值為引數x和引數y的最大公約數。
解:
def gcd(x, y): while y: t = x % y x = y y = t return x print(gcd(4, 6))
2. 編寫一個將十進位制轉換為二進位制的函式,要求採用“除2取餘”(腦補連結)的方式,結果與呼叫bin()一樣返回字串形式。
解:
def Dec2Bin(dec): temp = [] result = '' while dec: quo = dec % 2 dec = dec // 2 temp.append(quo) while temp: result += str(temp.pop()) return result print(Dec2Bin(62))