![Python程序设计:人工智能案例实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/423/39980423/b_39980423.jpg)
上QQ阅读APP看书,第一时间看更新
4.11 不定长参数列表
具有不定长参数列表的函数(如内置函数min
和max
)可以接收任意数量的参数。例如下面的代码中min
函数的调用:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/102-1.jpg?sign=1739278810-1QLJZLbmpxvdmRBpWZtsQZEOI8Dy0C9m-0-fc77c5bdafd8106a7ab6f411e0a3fb08)
min
的说明文档指出min
有两个必需的参数(名为arg1
和arg2
)和一个可选的形如*args
的参数,表明函数可以接收任意数量的附加参数。参数名称之前的*
告诉Python将剩余的参数打包成元组传递给参数args
。在上面的调用中,参数arg1
接收88
,参数arg2
接收75
,参数args
接收元组(96,55,83)
。
定义带不定长参数列表的函数
下面的代码定义了average
函数,它可以接收任意个数的参数:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/102-2.jpg?sign=1739278810-r36KQF2hfkrKgpuqANNcSzNh7wJEy5RJ-0-319cf52a779c8369b26e69cd936b98b5)
依照惯例,上面的代码将参数命名为args
,但这并不是强制性的,可以使用任意标识符。如果函数包含多个参数,那么*args
参数必须是最右端的一个参数。
下面的代码使用不同长度的参数列表调用几次average
函数:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/102-3.jpg?sign=1739278810-0rSKR3u2Tq3jKqwZfKhC5AL1FugzuYvx-0-5646b34ee1f4aeaffab1f8a24a2db753)
为了计算平均值,用args
元组中元素的总和(内置函数sum
的返回值)除以元素的个数(内置函数len
的返回值)。观察average
函数的定义可以知道,如果args
的长度为0,会引发ZeroDivisionError
。本书会在下一章演示如何在没有解包的情况下访问元组中的元素。
将可迭代对象的单个元素作为函数的参数
可以解包元组、列表或者其他可迭代对象,并将解包得到的元素作为参数单个传递给函数。在调用函数时将操作符*
作用于可迭代参数可以对该参数解包。下面的代码创建了一个包含5个元素的列表grades
,然后使用表达式*grades
对其解包,所得元素作为average
函数的参数:
![](https://epubservercos.yuewen.com/9955D6/20818201008362506/epubprivate/OEBPS/Images/102-4.jpg?sign=1739278810-dXrgfuI80hQPoBpYGDyh3VAQq3J8LrYd-0-969051e3a1ca233b44fb0ae8bf6a63c9)
上面的代码中的函数调用形式相当于average(88, 75, 96, 55, 83)
。