第十七課:函數(shù):Python的樂高積木

內(nèi)容來源于網(wǎng)絡(luò),本人只是在此稍作整理,如有涉及版權(quán)問題,歸小甲魚官方所有。

練習(xí)題(來自小甲魚官方論壇)

0. 你有聽說過DRY嗎?

答:DRY是程序員們公認(rèn)的指導(dǎo)原則:Don't Repeat Yourself. 特指在程序設(shè)計(jì)以及計(jì)算中避免重復(fù)代碼,因?yàn)檫@樣會(huì)降低靈活性、簡(jiǎn)潔性,并且可能導(dǎo)致代碼之間的矛盾。即不要寫重復(fù)的代碼,而是用“abstraction”類來抽象公有的東西。


1. 都是重復(fù)一段代碼,為什么我要使用函數(shù)(而不使用簡(jiǎn)單的拷貝黏貼)呢?

使用函數(shù)的優(yōu)點(diǎn):

  1. 可以降低代碼量(調(diào)用函數(shù)只需要一行,而拷貝黏貼需要N倍代碼)
  2. 可以降低維護(hù)成本(函數(shù)只需修改def部分內(nèi)容,而拷貝黏貼則需要每一處出現(xiàn)的地方都作修改)
  3. 使序更容易閱讀(沒有人會(huì)希望看到一個(gè)程序重復(fù)一萬行“I love FishC.com”)

2. 函數(shù)可以有多個(gè)參數(shù)嗎?

答:可以的,理論上你想要有多少個(gè)就可以有多少個(gè),只不過如果函數(shù)的參數(shù)過多,在調(diào)用的時(shí)候出錯(cuò)的機(jī)率就會(huì)大大提高,因而寫這個(gè)函數(shù)的程序員也會(huì)被相應(yīng)的問候祖宗,所以,盡量精簡(jiǎn)吧,在Python的世界里,精簡(jiǎn)才是王道!


3. 創(chuàng)建函數(shù)使用什么關(guān)鍵字,要注意什么?

答:使用“def”關(guān)鍵字,要注意函數(shù)名后邊要加上小括號(hào)“()”,然后小括號(hào)后邊是冒號(hào)“:”,然后縮進(jìn)部分均屬于函數(shù)體的內(nèi)容,例如:

1.  def MyFun():
2.      # 我是函數(shù)體
3.      # 我也是函數(shù)體
4.      # 我們都屬于函數(shù)MyFun()
5.  
6.  # 噢,我不屬于MyFun()函數(shù)的了

4. 請(qǐng)問這個(gè)函數(shù)有多少個(gè)參數(shù)?

1.  def MyFun((x, y), (a, b)):
2.    return x * y - a * b

答:如果你回答兩個(gè),那么恭喜你錯(cuò)啦,答案是0,因?yàn)轭愃朴谶@樣的寫法是錯(cuò)誤的!
我們分析下,函數(shù)的參數(shù)需要的是變量,而這里你試圖用“元祖”的形式來傳遞是不可行的。
我想你如果這么寫,你應(yīng)該是要表達(dá)這么個(gè)意思:

>>> def MyFun(x, y):
    return x[0] * x[1] - y[0] * y[1]

>>> MyFun((3, 4), (1, 2))
10
>>> 

5. 請(qǐng)問調(diào)用以下這個(gè)函數(shù)會(huì)打印什么內(nèi)容?

def hello():
    print('Hello World!')
    return
    print('Welcome To FishC.com!')

答:因?yàn)楫?dāng)Python執(zhí)行到return語句的時(shí)候,Python認(rèn)為函數(shù)到此結(jié)束,需要返回了(盡管沒有任何返回值)。

>>> hello()
hello world

編程題

0. 編寫一個(gè)函數(shù)power()模擬內(nèi)建函數(shù)pow(),即power(x, y)為計(jì)算并返回x的y次冪的值。

答:

def power(x,y):
    result = x**y
    return result
    
print(power(2, 8))

1. 編寫一個(gè)函數(shù),利用歐幾里得算法求最大公約數(shù),例如gcd(x, y)返回值為參數(shù)x和參數(shù)y的最大公約數(shù)。

答:

def gcd(x,y):
    while y:
        t = x % y
        x = y
        y = t
    return x
print(gcd(18,9))

2. 編寫一個(gè)將十進(jìn)制轉(zhuǎn)換為二進(jìn)制的函數(shù),要求采用“除2取余”的方式,結(jié)果與調(diào)用bin()一樣返回字符串形式。

答:

def DectoBin(num):
    temp = []
    result = ''
    while num:
        x = num % 2  # 取余數(shù),當(dāng)做個(gè)位...十位...百位...以此類推
        num = num // 2  #取整數(shù)當(dāng)做下一次的被除數(shù)
        temp.append(x)
    while temp:
        result += str(temp.pop())
    return result

print(DectoBin(444))

3.請(qǐng)寫下這一節(jié)課你學(xué)習(xí)到的內(nèi)容:格式不限,回憶并復(fù)述是加強(qiáng)記憶的好方式!

  • 函數(shù)的定義用def,函數(shù)名后要用冒號(hào)
  • 函數(shù)的參數(shù):多個(gè)參數(shù)用逗號(hào)隔開即可,最好寫好注釋,方便他人或自己日后維護(hù)
  • 函數(shù)的返回:函數(shù)中使用return

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容