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))
3. 請寫下這一節課你學習到的內容:格式不限,回憶並復述是加強記憶的好方式!