iT邦幫忙

2024 iThome 鐵人賽

DAY 4
1
自我挑戰組

從零開始的Python到Django應用開發系列 第 4

Day 04. 常用 Function and Methods 1-2

  • 分享至 

  • xImage
  •  

Dear All:

經過昨日的烤肉節,肯定有好好補充身體一波,那就讓我們繼續Function的部分,會加上實際使用案例來讓各位船長更熟悉操作這艘python遊艇。

船上的引擎啟動按鈕:def

<自己動手做函數的概念>

每艘遊艇都有一個啟動引擎的按鈕。
在 Python遊艇上,def就是那個神奇的按鈕,按下它,你就能啟動一個自動化的動作

def start_engine():
    print("引擎啟動,遊艇準備出發!")

start_engine()

說明:
def 就像是「出航按鈕」,一按下,船上的一切就準備好,你可以愉快地開始航行了!而且每次按,它都乖乖執行。


自動導航: 讓遊艇航行到某個地方的固定程序

你可能想要一個功能,每次出海前,船自動導航到海上的某個位置,這就像定義一個函數來固定做某件事情。
比如,船員每天要丟出魚網,我們可以寫個函數來自動執行這個任務

def fish():
    print("撒網捕魚... 成功捕到魚!")

fish()

說明:
fish() 函數,每天叫你去丟魚網,只要按一下捕魚按鈕,不用自己再學怎麼撒網,超自動化!魚自然就來了


多功能船錨:帶參數的函數

有時候,你需要根據不同的風向和水深來選擇不同的錨。
帶參數的函數就像這個多功能船錨,根據你輸入的參數(比如風速、水深),它會調整船錨的長度和重量

def drop_anchor(depth):
    print(f"放下 {depth} 米的錨,穩穩停住!")

drop_anchor(10)  # 放下 10 米長的錨

說明:
drop_anchor(depth) 就像每次要停船時,你可以根據海的深度選擇多長的錨。
想停在哪兒就停在哪兒,連浪都推不動你的船


百變船員:返回值

每次你下令船員執行完任務,他們總會回來告訴你他們做得如何。函數的返回值就像是你問船員「結果怎樣」,他們會把答案(返回值)告訴你

def check_fuel():
    return "燃料充足,無需加油!"

status = check_fuel()
print(status)  # 打印出來的結果:燃料充足,無需加油!

說明:
寫個函數去檢查油箱,船員回報你:「船長!油箱滿滿的,不用加油!」。
多方便呀,讓你省心又省力


多用途救生圈:帶多個參數的函數

當你需要多個參數來決定行動時,就像需要不同大小的救生圈來拯救不同體型的船員一樣。帶多個參數的函數可以根據不同的輸入進行動作

def throw_lifesaver(person, size):
    print(f"丟出 {size} 號救生圈給 {person}!")

throw_lifesaver("BOB", 3)
throw_lifesaver("Susan", 2)

說明:
想要丟救生圈時,throw_lifesaver(person, size) 幫你根據船員大小決定救生圈大小。要是BOB掉下去了,你還能選擇一個特大號的救生圈來救他!


船員多任務管理:默認參數

如果有些船員總是需要固定大小的救生圈,那你可以設置一個默認大小,這樣每次都不必特意告訴他們用多大的。

def throw_lifesaver(person, size=2):
    print(f"丟出 {size} 號救生圈給 {person}!")

throw_lifesaver("Melanie")  # 使用默認值
throw_lifesaver("BOB", 3)  # 指定大小

說明:
你可以設計一個默認大小的救生圈,就像說:「船員Melanie總是掉下去,給她設一個標準大小的救生圈。」這樣她掉海裡你就不必想太多,直接救她上來。

高級船員管理:嵌套函數

有時候,某些任務需要幾步才能完成,比如在撒魚網之前要先啟動雷達掃描魚群。
這時你可以使用嵌套函數,就像是讓一個船員指揮另一個船員進行操作

def prepare_fishing_trip():
    def scan_fish():
        print("雷達正在掃描魚群...")
    scan_fish()
    print("撒網捕魚!")

prepare_fishing_trip()

說明:
嵌套函數就像告訴你:「嘿,先掃描看看有沒有魚,再撒網捕魚!」你可以一次性下達所有指令,然後躺著喝杯咖啡,看著船員們井然有序地完成任務


怕大家對於昨日所講到的標準庫函數庫遺忘我們搭配來使用看看!

Counter:船上物資清點員

Counter 可以幫你快速清點遊艇上的補給數量,比如有多少瓶水、多少箱食物等...

from collections import Counter

supplies = ["water", "food", "water", "rope", "food", "food"]
supply_count = Counter(supplies)
print(supply_count) # 6

說明:
Counter 就像船上的物資清點員,每次你問他:「我們還有多少瓶水?」他都會準確報告:「船長,我們有 2 瓶水和 3 箱食物!」讓你輕鬆掌握所有補給狀況


deque:快速拿取補給的滑動抽屜

如果你需要快速取放物品,deque 就像船上的滑動抽屜,能讓你快速添加或移除補給品,尤其在緊急情況下

from collections import deque

lifeboats = deque(["Lifeboat A", "Lifeboat B"])
lifeboats.append("Lifeboat C")  # 新增救生艇
lifeboats.popleft()  # 最快取出第一艘救生艇
print(lifeboats)

說明:
當你需要救生艇時,輕輕一拉,救生艇立刻滑出來,動作超流暢。


自動補給站:defaultdict

defaultdict 就像遊艇上的智能補給站,每當你找不到物品時,它會自動生成一個新的給你。這樣你永遠不會因為缺少資源而陷入困境。

範例 1: 魚餌的補充
假設你在航行時需要記錄不同種類魚餌的數量,有時可能忘了準備某種魚餌。defaultdict 會自動給你一個空的數量,不用擔心空缺

from collections import defaultdict

# 定義一個自動補充魚餌的容器,初始數量為 0
bait_supplies = defaultdict(int)

# 紀錄補給
bait_supplies['shrimp'] += 10
bait_supplies['worm'] += 5
print(bait_supplies['shrimp'])  # 有 10 隻蝦魚餌
print(bait_supplies['fish'])  # 沒有 "fish",但 defaultdict 自動補充為 0

說明:
就像船上的無限魚餌補給機,當你大喊:「我們的魚餌還有多少?」它不管有沒有準備,總是回應:「不怕船長,我馬上準備好!」你永遠不會面臨空手而歸的尷尬


範例 2: 自動補充物資清單
假設你在進行船上物資記錄,每個物品的數量不一樣,但有時候某些物品你忘了記錄。defaultdict 可以幫助你在缺少數據時自動補充,確保不會漏掉任何東西。

from collections import defaultdict

# 定義一個船上物資的自動補充系統
ship_supplies = defaultdict(lambda: "還沒準備")

# 補充一些物資
ship_supplies['water'] = 50
ship_supplies['food'] = 20

# 查看物資狀況
print(f"水:{ship_supplies['water']} 公升")  # 水已經準備 50 公升
print(f"救生衣:{ship_supplies['lifejackets']}")  # 沒有救生衣,但自動提示「還沒準備」

說明:
就像你的船上AI管家,你問他「有沒有救生衣?」他不會告訴你「找不到」,而是說:「救生衣還沒準備好呢船長,想準備多少?」真是無比貼心的助手啊!


範例 3:記錄船員任務完成情況
當你需要追蹤船員的任務完成情況,但有些船員的工作進度未記錄,defaultdict 也能自動幫你填補數據空缺,防止統計時出錯。

from collections import defaultdict

# 記錄船員完成的任務數量,默認為 0
crew_tasks = defaultdict(int)

# 添加一些船員完成的任務
crew_tasks['Jack'] += 3
crew_tasks['Jill'] += 5

# 查看 Jack 和未記錄船員的任務情況
print(f"Jack 完成了 {crew_tasks['Jack']} 個任務。")  # Jack 完成 3 個任務
print(f"Tom 完成了 {crew_tasks['Tom']} 個任務。")  # Tom 未記錄過,自動為 0

說明:
就像船上的任務管理官,你不需要擔心漏掉哪個船員的工作紀錄。問他「Tom 完成了多少任務?」他會回答:「沒事,Tom 自動歸零,還沒幹活呢!」完美避免了記錄空缺的麻煩。


希望上述講解可以讓各位船長知道如何製作各種函數與操作標準庫函數庫,當然函數"庫"顧名思義,多到成"庫"肯定有百百種,礙於專案進度這邊只會挑幾個常用的來講解,如果全部講解完鐵人賽要來個180天
https://ithelp.ithome.com.tw/upload/images/20240918/20115294rhpnpCQbqP.jpg

今日大家可以打完收工!!一樣請到自己的控制室敲代碼啊!!!!後面遇到的標準庫函數庫會在講解。

進度更新表:
https://ithelp.ithome.com.tw/upload/images/20240918/20115294HVS0lk6m5h.png


上一篇
Day 03. 常用 Function and Methods 1-1
下一篇
Day 05. 常用 Function and Methods 1-3
系列文
從零開始的Python到Django應用開發8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言