Python怎么使用任意参数args和kwargs?

文章导读
上一个 测验 下一个 任意参数 (*args) 你可能想要定义一个能够接受任意数量或可变数量参数的函数。此外,这些任意数量的参数可能是位置参数或关键字参数。
📋 目录
  1. 任意参数 (*args)
  2. 任意参数示例
  3. 必需参数与任意参数
  4. 任意关键字参数 (**kwargs)
  5. 多个参数与任意关键字参数
A A

Python - 可变长度参数



上一个
测验
下一个

任意参数 (*args)

你可能想要定义一个能够接受任意数量可变数量参数的函数。此外,这些任意数量的参数可能是位置参数或关键字参数。

  • 以单个星号 * 开头的参数用于任意位置参数。

  • 以两个星号 ** 开头的参数用于任意关键字参数。

任意参数示例

下面是一个任意长度或可变长度位置参数的示例 −

# 数字的和
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 成为一个 tuple。我们可以遍历它的元素来对数字求和。

它将产生以下输出

100
6

必需参数与任意参数

也可以在可变数量值的序列之前有一些必需参数的函数。

示例

以下示例有一个 avg() 函数。假设学生可以参加任意数量的测试。第一项测试是必修的。他可以参加任意多测试以提高分数。该函数计算第一项测试的分数和他其余测试中的最高分数的平均值。

该函数有两个参数,第一个是必需参数,第二个用于保存任意数量的值。

#第一项测试的平均值和后续测试中的最佳成绩
def avg(first, *rest):
   second=max(rest)
   return (first+second)/2
   
result=avg(40,30,50,25)
print (result)

对 avg() 函数的调用将第一个值传递给必需参数 first,其余值传递给名为 rest 的 tuple。然后我们找到最大值并用它来计算平均值。

它将产生以下输出

45.0

任意关键字参数 (**kwargs)

如果参数列表中的变量前面有两個星号 ** 前缀,则该函数可以接受任意数量的关键字参数。该变量成为关键字:值对的 dictionary。

示例

以下代码是一个带有任意关键字参数的函数示例。addr() 函数有一个参数 **kwargs,它能够接受任意数量的地址元素,如 name、city、phno、pin 等。在函数内部,使用 items() 方法遍历 kwargs dictionary 中的 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() 函数,其中科学和数学的分数存储在必需参数中,可变数量选修科目的分数存储在 **optional 参数中。

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