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
广告

© . All rights reserved.