可变参数

定义默认参数要牢记一点:默认参数必须指向不变对象!

在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的:
以数学题为例子,给定一组数字a,b,c....,请计算a2 + b2 + c2 + …...。

    def calc(numbers):
           sum = 0
           for n in numbers:
                sum = sum + n * n
            return sum

但是调用的时候,需要先组装出一个list或者tuple:

>>> calc([1, 2, 3])
14
>>> calc((1, 3, 5, 7))
84

如果利用可变参数,调用函数的方式可以简化成:

>>> calc(1, 2, 3)
14
>>> calc(1, 3, 5, 7)
84

至此,可以把函数的参数改为可变参数:

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

定义可变参数和定义一个list或者tuple参数相比,仅仅在参数前面加一个*号。函数内部,参数 numbers接收到的是一个tuple,因此函数代码完全不变,但是调用该函数时,可以传入任意个参数,包括0个参数:

>>> calc(1, 2)
5
>>> calc()
0

如果要传入的参数是已经存在的list或者tuple,又该如何调用呢?

>>> nums = [1, 2, 3]
>>> calc(nums[0], nums[1], nums[2])
14

但是 上面的写法不够简练,还可以这样调用:

>>> nums = [1, 2, 3]
>>> calc(*nums)
14

Python是允许list或者tuple前面加*号,变成可变参数传进去的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容