iT邦幫忙

0

Python 的可變長度預設參數`*args` 和`**kwargs`

  • 分享至 

  • xImage
  •  

基礎可先參考這片文章:
Python 函數參數詳解:位置參數、關鍵字參數、預設參數、*args 和 **kwargs

預設參數的注意事項

  • 預設值的位置: 預設參數必須放在非預設參數的後面
  • 可變對象的預設值: 如果預設值是可變對象(如列表、字典),那麼在多次呼叫函數時,修改這個預設值會影響後續的呼叫。這是因為預設值只在函數定義時被創建一次。
  • None 作為預設值: None 是一個特殊的常量,通常用來表示一個對象不存在。它可以作為任何數據類型的預設值。
特性 位置參數 關鍵字參數 *args **kwargs
傳遞方式 按照參數順序傳遞 使用參數名稱傳遞 任意數量位置參數存為元組 任意數量關鍵字參數存為字典
定義時的語法 def func(a, b): def func(a=1, b=2): def func(*args): def func(**kwargs):
接收的參數類型 固定數量的參數 固定或預設的關鍵字參數 不定長位置參數 不定長關鍵字參數
參數是否可選
使用場景 參數數量固定且順序重要 提高可讀性、提供預設值 接收任意數量位置參數 接收任意數量鍵值對參數
優先順序(定義順序) 必須在 *args**kwargs 之前 必須在 **kwargs 之前 在關鍵字參數之後 必須在所有其他參數之後

*args:接收任意數量的位置參數

  • 收集不定數量的位置參數: 將多個位置參數打包成一個 tuple。
  • 應用場景: 當你不知道函數會接收多少個參數時,可以使用 *args。。
def my_function(*args):
    for arg in args:
        print(arg)

# 调用函数
my_function(1, 2, 3, "hello")
#1
2
3
hello

*args 會接收 1, 2, 3, "hello" 這幾個值,並將它們打包成一個 tuple。
然後,我們就可以通過遍歷這個 tuple 來處理這些參數。

def my_sum(*args):
    result = 0
    for num in args:
        result += num
    return result
total = my_sum(1, 2, 3, 4, 5)
print(total)
#15
#當你不知道函數會接收多少個參數時,就可以使用 *args。。

*args 在 for in 迴圈中的應用

當我們需要迭代 *args 中的所有元素,並且同時需要知道迭代的次數(也就是 *args 中元素的數量)時,就會用到 len(*args)。
1.獲取元素數量並進行迭代:

def my_function(*args):
    for i in range(len(args)):
        print(f"元素 {i+1}: {args[i]}")

my_function(1, 2, 3, "hello")
#元素 1: 1
元素 2: 2
元素 3: 3
元素 4: hello

可變長度的關鍵字參數 **kwargs

  • 收集不定數量的關鍵字參數: 將多個關鍵字參數打包成一個 dictionary。
  • 應用場景: 當你希望函數能接受任意多的命名參數時,可以使用 **kwargs。
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30, city="UK")
print(print_info)
#name: Alice
age: 30
city: UK
<function print_info at 0x7fea186ffd90>

小結

  • 關鍵字參數是一種靈活的參數傳遞方式。
  • 關鍵字參數可以提高代碼的可讀性。
  • 可以與位置參數混合使用,但位置參數必須在關鍵字參數之前。
  • **kwargs 可以用來收集任意數量的關鍵字參數。

*args**kwargs 可以一起使用,但 *args 必須放在 **kwargs 前面。

def my_function(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

my_function(1, 2, 3, name="Alice", age=30)

*args**kwargs 的區別

在 Python 函數中,*args**kwargs 是用來處理可變長度參數的特殊語法。
*args: 用來接收任意數量的位置參數,這些參數會被打包成一個 tuple。
**kwargs: 用來接收任意數量的關鍵字參數,這些參數會被打包成一個 dictionary。

def my_function(*args, **kwargs):
    print("位置參數:", args)
    print("關鍵字參數:", kwargs)

my_function(1, 2, 3, a=10, b=20)
#位置參數: (1, 2, 3)
#關鍵字參數: {'a': 10, 'b': 20}
#可以與位置參數混合使用,但位置參數必須在關鍵字參數之前。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言