iT邦幫忙

0

【Python】8.重複的 Code 不要寫兩次!用 def 打造你的專屬自動化工具箱

  • 分享至 

  • xImage
  •  

前言

隨著程式越來越大、功能越來越多,你很快就會發現一個工程師的終極噩夢:「程式碼變得又臭又長,而且裡面充滿了大量複製貼上的重複片段。」

身為一個優雅的 Python 程式設計師,我們絕對不能容忍這種事情發生。

今天要來學習如何把一整組常重複使用的程式碼打包成一個漂亮的「自訂函式(Function)」。
這就像是為你自己量身打造一個自動化工具箱!

🍹 輕鬆譬喻:函式就像一台「自動果汁機」

在 Python 裡,創造一個函式的指令叫做 def(Define 的縮寫)。

很多新手一看到函式的公式:def function_name(argument): 就覺得頭大。請別慌,請在腦海中想像一台「自動果汁機」:

  1. 外殼與按鈕(函式名稱):這台機器叫做 make_juice。
  2. 投入口(參數 Argument / Parameter):你必須把原料(例如:蘋果、牛奶)丟進去。
  3. 內部的刀片(程式碼邏輯):機器啟動,劈哩啪啦幫你把水果切碎並攪拌。
  4. 出水口(回傳值 Return):機器最後吐出一杯熱騰騰(或冰涼)的「蘋果牛奶」給你。

我們直接來看程式碼怎麼寫:

#1. 定義一台果汁機
def make_juice(fruit, liquid):
    print(f"正在將 {fruit} 和 {liquid} 放入果汁機...")
    result = f"一杯好喝的 {fruit}{liquid}"
    return result  # 關鍵字!吐出成品

定義好這台機器後,它不會自己啟動(就像果汁機插著電放在廚房,你不按開關它不會動)。我們要寫一行程式碼去「呼叫(Call)」它:

#2. 按下開關,呼叫函式
我的飲料 = make_juice("芒果", "綠茶")
print(我的飲料)

#執行後,終端機會優雅地印出:
#正在將 芒果 和 綠茶 放入果汁機...
#一杯好喝的 芒果綠茶

🚨 新手村最大世紀迷思:return 與 print 到底差在哪?

這絕對是全天下程式新手在學函式時,100% 都會跌倒一次的深坑:「既然前面都有 print 了,為什麼最後還要寫一個 return?它們不是都能把字秀出來嗎?」

完全不一樣! 請一定要把下面這段譬喻刻進大腦裡:

• print() 是「螢幕投射(大聲公)」:它單純只是把一個東西「秀在螢幕上給人類看」。電腦執行完 print 後,轉頭就把這個資料忘得一乾二淨。

• return 是「遞交成品(實體交付)」:它是函式執行完後,把真正做好的「實體成品」親手交還給主程式。主程式拿到這個成品後,可以把它存進變數裡,留著等一下繼續用。

🎭 舉個現實生活的血淋淋例子:

想像你今天去麥當勞點餐(呼叫點餐函式):

• 如果店員只有 print:他會對著你大喊:「好的,這是一位大麥克套餐!」(螢幕有顯示),然後……就沒有然後了,他沒有把餐點拿給你,他就轉身去忙了。你只能看著螢幕發呆,肚子還是扁的。

• 如果店員有 return:他不會廢話,直接把一袋熱騰騰的「大麥克套餐(實體成品)」交到你手上(Return 拿到資料)。

你拿到這袋餐點後,可以決定要現在吃、還是放進包包(存入變數)等一下吃。
這就是為什麼我們需要 return!當我們需要函式幫我們計算一個數字、或是處理一段文字,並把結果留給後面的程式碼繼續用時,就一定要用 return。

🛠️ 實戰練習:改造我們熟悉的工具

還記得我們常常需要把「字串轉成整數」或者是計算數值嗎?
我們來寫一個非常實用的函式,叫做「計算含稅價格」:

def calculate_tax(price):
    total = price * 1.05  # 假設營業稅是 5%
    return int(total)     # 把小數點去掉,只回傳整數部分

#呼叫看看
apple_phone = 30000
final_cost = calculate_tax(apple_phone)
print(f"這台手機的含稅價格是:{final_cost} 元。")

有了這個函式,以後不管你要算手機、筆電還是珍奶的含稅價,你都不用再重複寫一次 * 1.05,只需要優雅地呼叫 calculate_tax() 就可以了。程式碼是不是瞬間變得非常乾淨、非常好維護呢?

今日結語:你擁有第一個專屬工具了!

今天我們成功解鎖了「自訂函式」的心法,弄懂了果汁機理論、參數以及最重要的 return 觀念。這代表你已經具備了「模組化」的思維,不再是一條龍寫到底的新手了。

下次我們要延續函式的觀念,聊聊一個非常有趣但也充滿陷阱的話題——全域變數與區域變數的「平行宇宙」。為什麼有時候你在函式裡改變了便利貼,外面的世界卻完全沒反應?

🧑💻 今日小作業

動手寫寫看:定義一個叫 say_hello(name) 的函式:
• 參數是 name(一個人的名字)。
• 函式內部會 return 一個字串,例如:"哈囉,[名字],祝你有美好的一天!"
• 呼叫這個函式,並用 print 把回傳的結果印出來。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言