[Python基礎]函式Function引數*args和**kwargs

2024/01/20閱讀時間約 4 分鐘

[Python基礎]理解自定函式

先前我們在討論函式Fution定義時,引數(argument) 都是固定的數量的例如def add_numbers(a, b):,那如果要讓函式更彈性一點,是不是有可輸入不固定數量引數(argument) 用法呢?因為可能輸入的是Log的字串,可能會有不固定的數量的引數。

當你無法預測函式將接收到的引數數量時,就可以使用*args**kwargs來當函式的引數。

語法

*args: 用於處理可變數量的位置引數,將它們收集到一個元組中。

def example_function(*args):
for arg in args:
print(arg)

example_function(1, 2, "hello", [3, 4], 5)
# 輸出
# 1
# 2
# hello
# [3, 4]
# 5​

**kwargs: 用於處理可變數量的關鍵字引數,將它們收集到一個字典中。

def example_function(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")

example_function(name="John", age=25, city="New York")
# 輸出
# name: John
# age: 25
# city: New York

程式範例

簡單函式計算總和:

def calculate_sum(*args):
return sum(args)

result = calculate_sum(1, 2, 3, 4, 5)
print(result)

# 輸出
# 15

動態生成訊息:

建立一個可同時輸入*args**kwargs的函式

def generate_message(*args, **kwargs):
message = "Hello, "

if args:
message += " ".join(map(str, args))

if kwargs:
message += " with details: " + ", ".join([f"{key}={value}" for key, value in kwargs.items()])

return message

message1 = generate_message("John", "Doe")
message2 = generate_message(name="Jane", age=30)
message3 = generate_message( "Doe",name="Jane", age=30)

print(message1)
print(message2)
print(message3)

# 輸出
# Hello, John Doe
# Hello, with details: name=Jane, age=30
# Hello, Doe with details: name=Jane, age=30

*args位置引數與**kwargs關鍵字引數有順序的問題嗎?

是的,在Python中,位置引數必須在關鍵字引數之前,否則引發錯誤,如下圖

positional argument follows keyword argument

positional argument follows keyword argument

其他補充

星號 * 用於表示可變數量的位置引數(*args)。這個星號在Python函式中被視為可變數量的位置引數,也可以定義*a123之類的名稱,儘管在使用 * 符號時可以不使用 args 這樣的名稱,但為了代碼的可讀性,建議還是使用慣例,即 *args

**也是跟上述差不多,建議還是使用慣例,即**kwargs。


謝謝大家觀看~ 希望大家會喜歡,喜歡的話可以給愛心~追蹤一下,不會漏掉之後的文章喔~






49會員
87內容數
Python程式設計師,不是在學習就是在學習的路上
留言0
查看全部
發表第一個留言支持創作者!