Python 简明教程
Python - Arbitrary or, Variable-length Arguments
Arbitrary Arguments (*args)
您可能希望定义能够接受 arbitrary 或 variable number of arguments 的 function 。此外,任意数量的参数可能为 positional 或 keyword arguments 。
-
用单个星号 * 前缀的参数表示任意位置参数。
-
用两个星号 ** 前缀的参数表示任意关键字参数。
Arbitrary Arguments Example
以下是任意或可变长度位置参数的示例 −
# 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 变成了一个元组。我们可以对它的项目运行一个 loop 以添加数字。
它将生成以下 output −
100
6
Required Arguments With Arbitrary Arguments
在 variable 个值序列之前也可能具有带有某些必需参数的函数。
Example
以下示例有 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() 函数首先将第一个值传递给必需的参数,然后将剩余的值传递给名为 rest 的元组。然后我们找到最大值并使用它来计算平均值。
它将生成以下 output −
45.0
Arbitrary Keyword Arguments (**kwargs)
如果参数列表中的变量前缀有两个星号,则函数可以接受任意数量的关键字参数。变量成为关键字:值的 dictionary 对。
Example
下面的代码是带任意关键字参数的函数示例。addr() 函数有一个参数 **kwargs,能够接受任意数量的地址元素,如名称、城市、电话号码、邮政编码等。在函数内部,kwargs 关键字:值对的字典使用 items() 方法进行遍历。
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")
它将生成以下 output −
pass two keyword args
Name:John
City:Mumbai
pass four keyword args
Name:Raam
City:Mumbai
ph_no:9123134567
PIN:400001
Multiple Arguments With Arbitrary Keyword Arguments
如果函数使用混合类型的参数,则任意关键字参数应该在参数列表中的位置参数、关键字和任意位置参数之后。
Example
试想一下,科学和数学是必修科目,除此之外,学生可以选择任意数量的选修课。
以下代码定义一个 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)
它将生成以下 output −
maths: 80
sci: 75
Eng:70
Hist:65
Geo:72
percentage: 72.4