iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0
AI & Data

看對話學 Python 資料分析,用情境故事帶你入門系列 第 15

Day-15 函式 function,就好像建造積木一樣(上)


函式就像程式的積木,透過堆疊積木,就可以把想要的功能完成!Licensed by Adobe Stock

這天 Meiko 開著車到了保養廠,在休息室間,看著窗外的車子一台一台進到保養區。

Meiko 想著這段時間學到的程式,感覺學了不少。

Meiko:「Jason,我們前面學了不少東西了耶!」

Jason :「對啊,在這麼短的時間,其實你已經從一個程式生手,學會了輸入、輸出,條件判斷,for-loop,串列還有字典,基本的技巧你都走過一輪了。」

Meiko:「不過,我覺得我現在學到的東西,好像還是有點片段,有些時候不太知道怎麼把這這些內容全部結合再一起。」

Jason:「因為你現在就像在打基礎,我們前面學的部分,比較像在玩樂高一樣,你學到的都是一塊塊的積木。不過如果你想要處理比較多事情的話,你寫的程式可能就會變得比較冗長。」

Meiko:「好像是耶,不過我現在寫得最長的程式,就是一開始你教我印出星期一到星期日,然後再把每天花的錢印出來。程式應該不是只能做這樣的事情,對吧?」

Jason:「對啊,所以我今天要跟你講一個新的概念,叫做函式function。它的用意在避免重複的程式碼出現在程式中。」

Meiko:「我不知道什麼是函式拉,不過我倒是蠻喜歡吃韓式拌飯的。」

Jason:「(不理 Meiko 繼續說) 所謂的函式function就像一個黑盒子,你給它input,自行指定它的功能。在使用之後,它就會產出output給你。」

Meiko:「黑盒子?」

Jason:「你看,你今天開車到保養場,把車子交給服務人員進行保養,保養廠好像就是一個函式function,你的 input 就是你尚未保養的車,等待服務人員在保養廠幫你保養之後,output就會是一台已經保養好,可以安全上路的車。平常只要你車子開到特定的里程數,來保養廠就好?」

Meiko:「會啊,不來保養,儀表板上會一直有燈在閃,開起來很不安心。原來函式是這個意思,感覺上就是有一個特定功能的地方,我需要它的時候就來給它服務一下。」

Jason :「蠻像的,在寫程式的時候,遇到同一個操作,只需要呼叫這個函式就好,我們就不需要每次遇到同一個操作就再寫一次程式,你不會每次要保養的時候,自己又去蓋一個保養廠,對吧?」

Meiko:「可是寫程式都在電腦裡面,不就複製、貼上就好了?幹嘛那麼麻煩還要學一個新的概念?」

Jason:「那是因為你現在寫的程式不超過 50 行,有了函式,重複地事情我們就交給它,不必擔心複製貼上的時候,手殘把裡面的程式改壞。再來,有了函式(加上良好的命名),能夠讓其他人來閱讀這段程式的時候知道要做什麼。」

Meiko:「手殘改壞,是蠻有可能的,讓其他人閱讀,我倒是沒想到,因為現在我都是一個人在做。」

Jason:「還有一個重點就是容易除錯。你想想如果同樣區塊的程式碼,散佈在不同段落之中,如果程式碼有錯的話,我們要改起來就會需要每個段落都要去更正,這樣改起來會很痛苦!」

Meiko:「這樣聽起來就蠻有說服力的。我可不想一直在做重複的事呀!」

Jason:「這樣好了,我舉個例子給你看,你先前不是有寫過一個判斷條件,幫你決定下雨是否帶傘?像這樣

rain = True
if rain:
 print ("帶傘")
else:
 print ("不帶傘")

我們今天如果把這段程式碼,換成用函式的方式,重新寫一次的話,就會變成這個樣子。

rain = True
def action_for_rain(rain):
	if rain:
		print ("帶傘")
	else:
		print ("不帶傘")
print (action_for_rain(rain))

Meiko:「歐,這樣看來,你好像用一個action_for_rain把原本的描述包裝起來。」

Jason:「你可以看得出來什麼是input嗎?」

Meiko:「就是rain囉?」

Jason :「答對了,所以如果我們把這段程式碼執行一下就會像下面這樣

Meiko:「誒,Jason,因為你輸入的rain = True,所以action_for_rain會印出『帶傘』這個我理解,但為什麼『帶傘』下面還會有個『None』?」

Jason:「因為目前的函式我沒有設定回傳值。」

Meiko:「回傳值是什麼?」

Jason:「回傳值就是我前面提到函式的output,你丟了input到這個函式,函式處理完之後,可以丟出一個 ouptut,讓你知道結果是什麼。像我在函式action_for_rain ()的最後加入了一個return 0,代表回傳一個 0 的數值。

rain = True
def action_for_rain(rain):
 if rain:
   print("帶傘")
 else:
   print("不帶傘")
 return 0
print (action_for_rain(rain))

Meiko:「真的耶,這樣在『帶傘』的下面,就可以看到一個 0 了。可是 Jason,我們這個action_for_rain的函式,我覺得回傳值應該是告訴我要不要帶傘才是啊,現在回傳 0 好像沒有什麼意思?」

Jason:「的確,看來你開始在思考函式的功用在做什麼了!我們可以設定一個變數output,當條件成立時 output就設定成『帶傘』,否則就設定成『不帶傘』,然後把原本在函式裡面print()這個方式,改成直接 return出來一個結果,像這樣

rain = True
def action_for_rain(rain):
 if rain:
   output="帶傘"
 else:
   output="不帶傘"
 return output
print (action_for_rain(rain))

Meiko:「程式回傳『帶傘』,恩…這樣看起來比較符合真實的應用場景!不過,我們現在看起來好像還是在學習片段的程式耶...Jason」

Jason:「我們算是做成了第一塊積木囉...還有其他積木要做...」

牛刀小試

我大寶寶~拉,今天介紹的函式function的用法,基本上就是寫程式必備的能力!因為要處理的功能變多,程式的就會變得相當繁雜,透過function的做法,感覺就像把程式整理成一塊塊的積木!要堆疊起來就變得又快又輕鬆!你可以幫忙想一下 Meiko 的車在保養廠可能會做哪些事,我們明天就會討論如何用函式來表達保養廠進行保養 Meiko 車子的工作囉...

給大寶寶留言、分享、鼓勵

歡迎登入留言跟我分享你的想法唷!(登入不麻煩,點一下 FB 登入就可以留言了!)

1.喜歡這樣方式學 Python 的朋友請留言『+1』
2.如果前面的內容忘記了,趕快看一下大寶寶這一系列的看對話學 Python 資料分析,用情境故事帶你入門的列表!就能夠繼續 Happy Coding 囉!


上一篇
Day-14 日式咖哩店的資訊對話,活用字典 dictionary 儲存資料(下)
下一篇
Day-16 函式 function,就好像建造積木一樣(下)
系列文
看對話學 Python 資料分析,用情境故事帶你入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言