Python - 可變引數或任意引數



可變引數 (*args)

您可能希望定義一個能夠接受**任意**或**可變數量的引數**的函式。此外,任意數量的引數可能是位置引數關鍵字引數

  • 對於任意位置引數,引數字首為單個星號 *。

  • 對於任意關鍵字引數,引數字首為兩個星號 **。

可變引數示例

下面是一個任意或可變長度位置引數的示例:

# sum of numbers
def add(*args):
   s=0
   for x in args:
      s=s+x
   return s
result = add(10,20,30,40)
print (result)

result = add(1,2,3)
print (result)

字首為 "*" 的變數 args 儲存傳遞給它的所有值。此處,args 成為一個元組。我們可以對其元素進行迴圈以新增數字。

它將產生以下輸出

100
6

帶可變引數的必需引數

也可以在可變數量的值序列之前,為函式設定一些必需的引數。

示例

以下示例包含 avg() 函式。假設學生可以參加任意次數的考試。第一次考試是必修的。他可以參加任意次數的考試來提高自己的分數。該函式計算第一次考試成績的平均分以及其餘考試中的最高分。

該函式有兩個引數,第一個是必需引數,第二個用於儲存任意數量的值。

#avg of first test and best of following tests
def avg(first, *rest):
   second=max(rest)
   return (first+second)/2
   
result=avg(40,30,50,25)
print (result)

對 avg() 函式的以下呼叫將第一個值傳遞給必需引數 first,並將其餘值傳遞給名為 rest 的元組。然後我們找到最大值並使用它來計算平均值。

它將產生以下輸出

45.0

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

如果引數列表中的變數字首有兩個星號,則函式可以接受任意數量的關鍵字引數。該變數成為字典,其中包含關鍵字:值對。

示例

以下程式碼是具有任意關鍵字引數的函式的示例。addr() 函式有一個引數 **kwargs,它能夠接受任意數量的地址元素,如姓名、城市、電話號碼、郵政編碼等。在函式內部,使用 items() 方法遍歷 kwargs 字典中的 kw:value 對。

def addr(**kwargs):
   for k,v in kwargs.items():
      print ("{}:{}".format(k,v))

print ("pass two keyword args")
addr(Name="John", City="Mumbai")
print ("pass four keyword args")

# pass four keyword args
addr(Name="Raam", City="Mumbai", ph_no="9123134567", PIN="400001")

它將產生以下輸出

pass two keyword args
Name:John
City:Mumbai
pass four keyword args
Name:Raam
City:Mumbai
ph_no:9123134567
PIN:400001

帶任意關鍵字引數的多引數

如果函式使用混合型別的引數,則任意關鍵字引數應位於位置引數、關鍵字引數和任意位置引數之後。

示例

想象一下,科學和數學是必修科目,此外學生可以選擇任意數量的選修科目。

以下程式碼定義了一個percent()函式,其中科學和數學的成績儲存在必填引數中,而可變數量的選修科目的成績儲存在可選引數中。

def percent(math, sci, **optional):
   print ("maths:", math)
   print ("sci:", sci)
   s=math+sci
   for k,v in optional.items():
      print ("{}:{}".format(k,v))
      s=s+v
   return s/(len(optional)+2)

result=percent(math=80, sci=75, Eng=70, Hist=65, Geo=72)
print ("percentage:", result)

它將產生以下輸出

maths: 80
sci: 75
Eng:70
Hist:65
Geo:72
percentage: 72.4
廣告