Python - 任意或變長引數

大家好,未來的Python巫師們!今天,我們將進入Python中任意引數的神奇世界。如果你是編程新手,也別擔心;我將成為你友善的嚮導,我們將一步步探索這個概念。所以,拿起你的虛擬魔杖(鍵盤),我們一起深入探險吧!

Python - Arbitrary Arguments

任意引數 (*args)

想象一下,你正在計劃一個派對,但你不知道會有多少朋友出席。你想準備好應對任何數量的客人。這正是Python函數中的任意引數所做的——它們允許你處理未知數量的引數!

在Python中,我們使用*args來表示任意引數。這裡的星號(*)是神奇的符號,而args只是一個約定俗成的命名(你可以使用任何名稱,但args被廣泛使用並被公認)。

我們來看看一個簡單的例子:

def 歡迎朋友們(*args):
for 朋友 in args:
print(f"你好,{朋友}!")

歡迎朋友們("艾麗絲", "鮑勃", "查理")

在這個例子中,歡迎朋友們()可以接受任何數量的引數。當我們運行這段代碼時,它將輸出:

你好,艾麗絲!
你好,鮑勃!
你好,查理!

但如果我們有更多的朋友呢?沒問題!我們可以輕鬆地添加更多的名字:

歡迎朋友們("艾麗絲", "鮑勃", "查理", "大衛", "夏娃")

我們的函數將高興地歡迎他們所有人!

*args的工作原理

當你在函數定義中使用*args時,Python會將所有引數打包成一個元組。然後,你可以在函數內迭代這個元組。這就像擁有一個能夠容納任意數量項目的神奇袋子!

任意引數示例

讓我們創建一個更實用的例子。假設我們想要計算變化數量的分數的平均值:

def 計算平均分(*args):
if len(args) == 0:
return 0
總分 = sum(args)
平均分 = 總分 / len(args)
return 平均分

print(計算平均分(85, 90, 78))
print(計算平均分(92, 88, 95, 78, 80))

這將輸出:

84.33333333333333
86.6

我們的計算平均分()函數可以處理任意數量的分數。它使用內置的sum()函數來計算總分,然後除以分數的數量來得到平均值。

必需引數與任意引數

有時,你可能希望與任意引數一起使用一些必需的引數。不用擔心!Python為你提供了解決方案。你可以將常規參數與*args混合使用。只是記得將*args放在最後:

def 介紹班級(老師, *學生):
print(f"你好,我是{老師},我將成為你的老師。")
print("讓我們來介紹學生們:")
for 學生 in 學生:
print(f"- {學生}")

介紹班級("約翰遜先生", "艾麗絲", "鮑勃", "查理")

這將輸出:

你好,我是約翰遜先生,我將成為你的老師。
讓我們來介紹學生們:
- 艾麗絲
- 鮑勃
- 查理

在這個例子中,老師是一個必需的引數,而*學生可以接受任意數量的學生名字。

任意關鍵字引數 (**kwargs)

現在,讓我們提升一個等級!如果我們想傳遞鍵值對作為引數呢?進入**kwargs(關鍵字引數)的世界!這就像*args,但用於命名引數。

這裡有一個簡單的例子:

def 打印用戶信息(**kwargs):
for 鍵, 值 in kwargs.items():
print(f"{鍵}: {值}")

打印用戶信息(name="艾麗絲", age=25, city="紐約")

這將輸出:

name: 艾麗絲
age: 25
city: 紐約

在這種情況下,**kwargs創建了一個字典,其中鍵是引數的名稱,值是引數的值。

多個引數與任意關鍵字引數

你可以在一個函數中結合常規引數、*args**kwargs。只是記得順序:先常規引數,然後*args,最後**kwargs

這裡有一個將它們結合起來的例子:

def 學生信息(學校, *args, **kwargs):
print(f"學校: {學校}")
print("科目:")
for 科目 in args:
print(f"- {科目}")
print("其他信息:")
for 鍵, 值 in kwargs.items():
print(f"{鍵}: {值}")

學生信息("Python高中", "數學", "科學", "歷史", name="艾麗絲", age=16, grade="十年級")

這將輸出:

學校: Python高中
科目:
- 數學
- 科學
- 歷史
其他信息:
name: 艾麗絲
age: 16
grade: 十年级

方法總結

以下是本章討論的方法的總結表:

方法 語法 描述
任意引數 *args 允許函數接受任意數量的位置引數
任意關鍵字引數 **kwargs 允許函數接受任意數量的關鍵字引數
組合使用 def func(常規引數, *args, **kwargs) 結合常規引數與兩種任意引數

記住,任意引數的威力在於它們的靈活性。它們允許你創建有更多用途的函數,可以適應不同的情況。

當我們結束這次對任意引數的神奇探險時,我希望你對使用這些強大的工具更加有信心。練習在你自己的函數中使用*args**kwargs,不久之後,你將能夠以一個經驗豐富的巫師般的熟練度編寫Python代碼。編程愉快,願你的函數永遠靈活!

Credits: Image by storyset