2. Function

《前言》

各位好久不見,時隔兩個月我又回來了!中途有挺多意外的,希望今年和明年都能順順利利的度過,同時也祝大家聖誕節快樂啦🎉!!!

《Function 介紹》

在這章節裡,我們將會介紹一下Function(函數)這個概念。函數在程序裡面有很重要的作用,它的主要作用有三個:

  1. 減少同樣的程式碼出現在多個地方。
  2. 令編程人員方便維護和理解程式。
  3. 將程式分成不同的模組,讓每個模組負責一個特定的功能,方便理解和維護。

《Function 結構》

在Python中, function的格式主要有兩種,分別是有輸入參數和返回值

1
2
def add_one(x):
return x + 1

以及沒有輸入參數和返回值

1
2
def print_hello_world():
print('hello world')

以這兩個例子來說,一個function的結構有3個要素,他們分別是:

  1. def : 用於定義函數功能
  2. function name: 寫在 def 後面的就是函數名稱,用於調用函數。

以上面兩個例子為例:
add_oneprint_hello_world就是這兩個函數的名稱。

  1. parameter: x 可以作為variable(上節提到的)的參數傳入至function內。

此外,相信聰明的你也發現了,這兩個函數也有不同之處:

那就是return返回值。
為什麼會有不同呢?

這是因為在python裡面,函數有兩種形式,分別是有返回值和無返回值。

add_onefunction裡面,x作為參數被傳入至該函數內,並且進行了 x+1 的動作,最後將結果返回。

我們簡單舉個🌰:

1
f(x) = x + 1

不知道大家有沒有一種被中學數學支配的恐懼感,其實函數的原理就是這種數學概念。

1
2
3
4
5
6
7
8
when x = 1
f(1) = 1 + 1 = 2

when x = 2
f(2) = 2 + 1 = 3

when x = 3
f(3) = 3 + 1 = 4

我們在python裡面可以這樣使用:

1
2
3
4
def add_one(x):
return x + 1

y = add_one(1) # y = 2

噹噹噹!這樣我們就成功調用函數了。簡單解釋一下,我們定義了一個add_one的函數,他的作用是將輸入參數的數值加1,這個代碼在python裡面是不被直接執行的,直到我們調用它。在y = add_one(1)這一行裡面。


《Function 作用》

重用性

我們來解釋一下重用性這個概念:

在代碼裡面我們盡可能的追求代碼的可重用性,為什麼呢?我們繼續舉🌰,先看以下代碼:

1
2
3
4
5
6
7
8
9
# cal the area of circle a, b ,c
r1 = 3
a_area = 3.14 * r1 * r1

r2 = 4
b_area = 3.14 * r2 * r2

r3 = 5
c_area = 3.14 * r3 * r3

在這種情況下,我們會需要使用很多重複的代碼去獲取結果。

接下來我們來看看使用function之後的代碼:

1
2
3
4
5
6
7
8
9
10
11
def circle_area(r):
return 3.14 * r * r

r1 = 3
a_area = circle_area(r1)

r2 = 4
b_area = circle_area(r2)

r3 = 5
c_area = circle_area(r3)

試想像一下,如果這個程式需要重複一萬次,一百萬次或者更多,假如在中間出現了錯誤,那麼尋找錯誤點的時間是不是就會比較長?

在這種情況下用一個函數代替原方法,就只需要確保函數裡面的數學公式正確無誤即可,方便日後修改公式和維護。

1
2
3
4
5
6
7
8
9
10
11
12
13
name1 = 'KAI'
sex1 = 'male'
major1 = 'CS'
print('name: ' + name1)
print('sex: ' + sex1)
print('major: ' + major1)

name2 = 'KAIKAI'
sex2 = 'male'
major2 = 'EE'
print('name: ' + name2)
print('sex: ' + sex2)
print('major: ' + major2)
1
2
3
4
5
6
7
def print_personal_info(name, sex, major)
print('name: ' + name)
print('sex: ' + sex)
print('major: ' + major)

print_personal_info('KAI','male','CS')
print_personal_info('KAIKAI','male','EE')

對比這兩個例子,這樣是不是方便很多呢~


解釋性

這個也是我們程序猿需要的職業操守,如果讓我評價什麼是好的代碼,我認為好的代碼必須具備以下條件:

  • 不是花裡胡哨的數據結構和算法
  • 不是各種高大上的面向對象
  • 不用注釋也能讓別的程序猿看懂。

我相信會有人喜歡寫一些別人看不懂的代碼,讓別人看起來覺得好像很厲害。

坦白說,其實我們自己寫的代碼,在過了一個星期之後,自己也有可能不記得當時寫了什麼(沒錯,正是在下🤦)。

這時候一段清晰且容易理解的代碼可以快速的幫助自己去回憶起當時的思路和想法。

在職場裡面,我們應該盡可能的讓自己的同事們或者上司更容易地去理解你寫的代碼。

方便我們在尋求他們幫助的時候,他們可以更快地幫你解決你遇到的問題,而不是花費時間在猜測你的代碼到底想幹嘛hhh。


解耦性

這個可能就比較複雜,可能會之後再解釋。絕對沒有放鴿子的意思

簡單來說就是,function盡可能遵守一個最小功能原則,就好比拼湊lego一樣。假如我們想拼出一輛車子,我們可以先組裝輪子,然後是底板,再來是車身,每個部分都是可以被獨立組裝的(define)。然後我們就像搭積木一樣,把他們組合在一起。

結語

最後再次祝大家聖誕快樂啦。其實也咕了很久了哈哈哈哈,也要跟大家說聲抱歉,我也開始被我的編輯老大催稿了,希望我能繼續一邊學習,一邊上班,在閒暇之餘慢慢生產更多教學內容。


小編的話: 還看?既然忙完了那就加油生產文章吧 (0 w 0)


2. Function
http://example.com/2023/12/25/Function/
Author
KAI
Posted on
December 25, 2023
Licensed under