【💊 Python的解憂錦囊】 函數裡的1個*args與2個**kwargs有什麼不同?

閱讀時間約 3 分鐘
raw-image


我們常常在看開源專案時, 會在函式中看到「*args」與「**kwargs」這兩個參數, 一直以來都很好奇也尚未使用, 趁著好奇心強烈的時期趕緊來了解一番, 並且將學習過程轉化為易懂的概念提供給有需要的朋友參考, 也期望我們能夠共同學習程式語言, 讓科技引領世界進步。

首先是 *args

會將參數以 tuple的形式帶入, 有什麼好處? 舉例來說, 我們設計一個加法函數如下:

def add(a: int, b: int) -> int:
return a + b

假設我們要對3個值相加, 那麼可能會這樣做:

def add(a: int, b: int, c: int) -> int:
return a + b + c

🤔 那如果更多呢?? 是不是非常的冗長呢?

那既然我們的加法器非常的彈性, 可以對很多數字加總, 那麼我們就可以善用*args將參數都轉化成tuple形式, 再用一個迴圈進行加總即可。

from typing import Tuple

def add(*args: Tuple[int, ...]) -> int:
return sum(args)

print(add(1,2,3))

再來是 **kwargs

我們學會了 *args的用法, 雖然很彈性沒錯, 但假設我們需要具名的參數呢? 所謂的具名的參數就是我們可以給定一個可識別的名稱, 那可以怎麼做呢? 我們可以運用 **kwargs的技巧將參數轉成字典型態。

from typing import Dict

def func(**kwargs: Dict[any, any]):
print(kwargs)

func(a='a', b='b', custom='客製化參數')

# {'a': 'a', 'b': 'b', 'custom': '客製化參數'}

簡單來說就是將使用者的參數轉換成Dict字典型態。

兩者能並行嗎?

可以, 但有以下限制:

🚫 *args 一定要在 **kwargs 前面, 否則會報錯!

raw-image



我們應該要這麼放:

from typing import Dict, Tuple

def func(*args: Tuple[any, ...], **kwargs: Dict[any, any]):
print(args)
print(kwargs)

func(1, 2, 3 , a='a', b='b', custom='客製化參數')

預計得到這樣的結果:

(1, 2, 3)
{'a': 'a', 'b': 'b', 'custom': '客製化參數'}

結語

看了幾個開源專案發現了這些用法, 一開始還真的有點不容易理解, 但相信這樣的設計一定是能夠滿足某些使用情境, 因此才會被發展出來, 我們只需要知道怎麼用就可以了, 等到情境剛好遇到的那一天就能夠派上用場。

總之最終目的就是讓函式更加彈性靈活, 尤其在我們尚未確定完整的函數參數狀況之下。

113會員
255內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
為什麼需要非同步? 我們在「【Web微知識系列】 Web Workers」有介紹到在瀏覽器可執行腳本Javascript環境底下如何完成非同步的操作, 主要是為了讓任務更有效率的進行, 不會因為一個非常耗時的工作堵塞住整個服務, 導致無法服務他人的窘境。 大家應該經常在餐廳裡會看到服務員協
我們在處理音檔時常常會使用到 [soundfile](https://pypi.org/project/soundfile/) 這套工具, 當我們試圖讀取檔案時卻發生了這樣的錯誤訊息… TypeError: Not allowed for existing files (except 'RAW')
關於多執行緒/多行程的使用方式 在Python 3.2版本之後加入了「concurrent.futures」啟動平行任務, 它可以更好的讓我們管理多執行緒/多行程的應用場景,讓我們在面對這種併發問題時可以不必害怕, 用一個非常簡單的方式就能夠處裡, 底下我們將為您展示一段程式碼: imp
這個問題發生在我們開發Python的Websocket Server時, 使用以下的程式碼架設服務 start_server = websockets.serve(server, 'localhost', args.port) async with start_server:
假設我們今天想要訓練一個AI模型, 那麼我們會有一批大型資料集, 通常會根據比例來切分三個模型訓練所需的訓練集(train)、驗證集(dev)、測試集(test), 而我們本次會示範一下Python如何對一個List清單進行切分, 基本上大同小異, 我們只要掌握作法即可概念相通。 任務提示
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
為什麼需要非同步? 我們在「【Web微知識系列】 Web Workers」有介紹到在瀏覽器可執行腳本Javascript環境底下如何完成非同步的操作, 主要是為了讓任務更有效率的進行, 不會因為一個非常耗時的工作堵塞住整個服務, 導致無法服務他人的窘境。 大家應該經常在餐廳裡會看到服務員協
我們在處理音檔時常常會使用到 [soundfile](https://pypi.org/project/soundfile/) 這套工具, 當我們試圖讀取檔案時卻發生了這樣的錯誤訊息… TypeError: Not allowed for existing files (except 'RAW')
關於多執行緒/多行程的使用方式 在Python 3.2版本之後加入了「concurrent.futures」啟動平行任務, 它可以更好的讓我們管理多執行緒/多行程的應用場景,讓我們在面對這種併發問題時可以不必害怕, 用一個非常簡單的方式就能夠處裡, 底下我們將為您展示一段程式碼: imp
這個問題發生在我們開發Python的Websocket Server時, 使用以下的程式碼架設服務 start_server = websockets.serve(server, 'localhost', args.port) async with start_server:
假設我們今天想要訓練一個AI模型, 那麼我們會有一批大型資料集, 通常會根據比例來切分三個模型訓練所需的訓練集(train)、驗證集(dev)、測試集(test), 而我們本次會示範一下Python如何對一個List清單進行切分, 基本上大同小異, 我們只要掌握作法即可概念相通。 任務提示
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在現代醫學中,抗生素扮演著重要的角色,對抗細菌感染、保護我們的身體健康。然而,正確使用抗生素是保護自己和社會免受抗藥性影響的關鍵。一起來了解抗生素的基本知識,從使用時機到副作用,提供您全方位的了解。 💡
Thumbnail
我們將探索函式的定義和調用,這是程式設計中非常重要且強大的概念,它可以將大型程式切割成小的、可重複使用的函式。讓我們一起來了解吧!函式的定義、呼叫和返回值是學習函式的核心。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
在本篇Python學習筆記中,我們探討了字典的建立與存取,以及常用方法,字典是一種強大的資料型態,透過key和value的對應關係存儲和取得資料,我們學會了建立字典、存取資料、新增/修改/刪除項目,以及取得key和value的方法,字典是Python中不可或缺的工具!
Thumbnail
經濟是國家的命脈,社稷重點無可厚非,國際情勢不好、經濟危機出現時,國家資源救市,穩定法人、投資人信心,維持正常的金融機轉,讓國家度過危機,👍值得嘉許,只是這次國安基金護盤的故事,讓人百般尋味。 台股去年創下18650破紀錄新高,隨著國際局勢一起回檔,國安基金決定進場護盤: 第一:當時股市萬八,不是
Thumbnail
在最近動盪的銀行冒險記裡,開始出現銀行倒閉的新聞,或是接近倒閉被接管,💣一個個炸彈,在主政者的輔助下,細細呵護的灌溉、包紮,給予營養補給,🇺🇸美洲的銀行危機,暫時告一段落。 後來出現了另一個危機,CS瑞士信貸,不是CS絕對武力,Credit Suisse,規模同比有過之而無不及,好像一顆加大的
Thumbnail
這一年來,得到最大的收穫就是「做自己」! 最浪費時間的事是什麼呢?就是拿自己和別人比較🥹 嘿親愛的,我們都是獨特且美麗的存在❤️
Thumbnail
今天的領受是在上個禮拜每週五都會去上的照顧者關懷工作坊, 課中領受到的!! (哈哈只剩下禮拜最後一堂課了) 感謝主也可以給我些思考, 和這個領受❤️🤗 這週應該算是課堂裡 塞最多內容的一課了, 哈哈我後來都有點精神渙散想睡了🤣 辛苦老師了!!! 主要講到兩個主題: 步向正面思考、一些用藥知識 和
Thumbnail
第一家公司產品的由專業團隊設計和研發的,因此品質得到保證。提供豐富的資源,包括在線健康諮詢服務和健康資訊,幫助顧客了解如何使用產品和實現健康目標。該公司的產品具有良好的可負擔性。通過線上購買,顧客可以輕鬆訂購所需的產品,並且該公司的價格也相對實惠。
《女性性需求第一定律》 為什麼有些女生總是會把性行為這件事無限往後延? 今天史提將從紅藥丸演化博弈心理學的角度 ,來探討一下這個問題🤨 想像你是一個妹子,有一個男的每天照三餐都會給妳鮮花素果🍉🍑🥝因為他想追妳,妳能有的選項: 1.跟他交往並啪啪啪🤨 2.不跟他交往也不啪啪啪🤔 = ;
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在現代醫學中,抗生素扮演著重要的角色,對抗細菌感染、保護我們的身體健康。然而,正確使用抗生素是保護自己和社會免受抗藥性影響的關鍵。一起來了解抗生素的基本知識,從使用時機到副作用,提供您全方位的了解。 💡
Thumbnail
我們將探索函式的定義和調用,這是程式設計中非常重要且強大的概念,它可以將大型程式切割成小的、可重複使用的函式。讓我們一起來了解吧!函式的定義、呼叫和返回值是學習函式的核心。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
在本篇Python學習筆記中,我們探討了字典的建立與存取,以及常用方法,字典是一種強大的資料型態,透過key和value的對應關係存儲和取得資料,我們學會了建立字典、存取資料、新增/修改/刪除項目,以及取得key和value的方法,字典是Python中不可或缺的工具!
Thumbnail
經濟是國家的命脈,社稷重點無可厚非,國際情勢不好、經濟危機出現時,國家資源救市,穩定法人、投資人信心,維持正常的金融機轉,讓國家度過危機,👍值得嘉許,只是這次國安基金護盤的故事,讓人百般尋味。 台股去年創下18650破紀錄新高,隨著國際局勢一起回檔,國安基金決定進場護盤: 第一:當時股市萬八,不是
Thumbnail
在最近動盪的銀行冒險記裡,開始出現銀行倒閉的新聞,或是接近倒閉被接管,💣一個個炸彈,在主政者的輔助下,細細呵護的灌溉、包紮,給予營養補給,🇺🇸美洲的銀行危機,暫時告一段落。 後來出現了另一個危機,CS瑞士信貸,不是CS絕對武力,Credit Suisse,規模同比有過之而無不及,好像一顆加大的
Thumbnail
這一年來,得到最大的收穫就是「做自己」! 最浪費時間的事是什麼呢?就是拿自己和別人比較🥹 嘿親愛的,我們都是獨特且美麗的存在❤️
Thumbnail
今天的領受是在上個禮拜每週五都會去上的照顧者關懷工作坊, 課中領受到的!! (哈哈只剩下禮拜最後一堂課了) 感謝主也可以給我些思考, 和這個領受❤️🤗 這週應該算是課堂裡 塞最多內容的一課了, 哈哈我後來都有點精神渙散想睡了🤣 辛苦老師了!!! 主要講到兩個主題: 步向正面思考、一些用藥知識 和
Thumbnail
第一家公司產品的由專業團隊設計和研發的,因此品質得到保證。提供豐富的資源,包括在線健康諮詢服務和健康資訊,幫助顧客了解如何使用產品和實現健康目標。該公司的產品具有良好的可負擔性。通過線上購買,顧客可以輕鬆訂購所需的產品,並且該公司的價格也相對實惠。
《女性性需求第一定律》 為什麼有些女生總是會把性行為這件事無限往後延? 今天史提將從紅藥丸演化博弈心理學的角度 ,來探討一下這個問題🤨 想像你是一個妹子,有一個男的每天照三餐都會給妳鮮花素果🍉🍑🥝因為他想追妳,妳能有的選項: 1.跟他交往並啪啪啪🤨 2.不跟他交往也不啪啪啪🤔 = ;