1. 程式人生 > >《零基礎入門學習Python》(17)--函式:Python的樂高積木

《零基礎入門學習Python》(17)--函式:Python的樂高積木

前言

小甲魚的話——相信大家小時候都玩過神奇的樂高積木, 只要通過想象力和創造力我們可以拼湊很多神奇的東西,那麼隨著我們學習的深入,我們編寫的Python程式碼也將日益增加,並且也越來越複雜, 
所以呢,我們需要找尋一種方法,對這些複雜的方法進行重新的組織,目的就是為了使程式碼的邏輯更加簡單易懂。

我們說了,優秀的東西永遠是經典的,而經典的東西永遠是簡單的,不是說複雜不好,而是複雜的東西簡單化,而之就會成為經典。為了實現我們的程式程式碼更加的簡單,我們要學著把程式成為越來越小組成部分,在這裡呢,小甲魚會教大家三種方法來實現: 

分別是函式,物件,模組,那麼這三大部分是我們學習Python中的重點之重。

知識點

這節課首先教大家函式函式就是把程式碼打包成不同形態的樂高積木,以便我們發揮想象力,進行隨意的拼裝和反覆使用。

關於函式,一個程式可以按照不同的功能實現,切割成許許多多的小小的個體,而函式呢,就是可以完成某一部分小小功能個體的程式碼塊。

在Python中,建立一個函式,我們用def關鍵字 ,然後呼叫函式

>>> def MyFirstFunction():
	print("gogogogogogo")
	print("......")
	print("let's go")

>>> MyFirstFunction()
gogogogogogo
......
let's go

建立帶有引數的函式

>>> def MySencondFunction(name):
    print(name + '我愛你!')

>>> MySencondFunction()
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    MySencondFunction()
TypeError: MySencondFunction() missing 1 required positional argument: 'name'

>>> MySencondFunction('小甲魚')
小甲魚我愛你!

'多個引數':

>>> def add(num1,num2):
    result = num1 + num2
    print(result)

>>> add(1,2)
3


>>> def add(num1,num2):
    return (num1 + num2)

>>> add(1,2)
3
>>> print(add(5,6))
11

課後習題

測試題

  • 你有聽說過DRY嗎? 
    DRY是程式設計師們公認的指導原則:Don’t Repeat Yourself. 
    快快武裝你的思維吧,拿起函式,不要再去重複拷貝一段程式碼了。

  • 都是重複一段程式碼,為什麼我要使用函式(而不使用簡單的拷貝黏貼)呢?

可以降低程式碼量(呼叫函式只需一行,而拷貝黏貼需要N倍程式碼) 
可以降低維護成本(函式只需修改def部分內容,而拷貝黏貼需要每一處出現的地方都作修改) 
使程式更容易閱讀(沒有人會希望看到一個程式重複一萬行’I love FishC.com’)
  • 函式可以有多個引數嗎? 

可以,理論上你想要有多少個可以有多少個,只不過如果函式的引數過多,在呼叫的時候出錯的機率就會大大提高。所以,儘量精簡吧,在Python的世界裡,精簡才是王道~

建立函式使用什麼關鍵字,要注意什麼? 
def,要注意函式名後邊要加上小括號(),然後小括號後邊是冒號:然後縮排部分均屬於函式體的內容。

def MyFun():
    # 我是函式體
    # 我也是函式體
    # 我們都屬於函式MyFun()

# 噢,我不屬於MyFun()函式的了
  • 請問這個函式有多少個引數?
def MyFun((x,y),(a,b)):
    return x*y - a*b

SyntaxError: invalid syntax

如果你回答兩個,那麼恭喜你錯啦,答案是0,因為類似於這樣的寫法是錯誤的~ 我們分析下,函式的引數需要的是變數,而這裡你試圖用“元組”的形式來傳遞是不可行的。 

可以改寫成如下:

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

>>> MyFun((5,6),(1,3))
27
  • 請問呼叫以下這個函式會列印什麼內容?
def hello():
    print('Hello World!')
    return
    print('Welcome To FishC.com!')
  • 會列印:
>>> hello()
Hello World!

因為當Python執行到return語句時,Python認為函式到此結束,需要返回了(儘管沒有任何返回值)

動動手

  • 編寫一個函式power()模擬內建函式pow(),即power(x,y)為計算並返回x的y次冪的值。
def power(x, y):
    result = 1

    for i in range(y):
        result *= x

    return result

print(power(3, 4))
  • 編寫一個函式,利用歐幾里德演算法求最大公約數,例如gcd(x,y)返回值為引數x和引數y的最大公約數。
def gcd(x, y):
    while y:            # -->6        -->4        -->2         -->0
        t = x % y       # -->4%6=4    -->6%4=2    -->4%2 =0     
        x = y           #  -->6        -->4        -->2
        y = t           # -->4        -->2        -->0

    return x

print(gcd(4, 6))
  • 編寫一個將十進位制轉換為二進位制的函式,要求採用除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))