当自定义函数有大量参数或者参数数量不定时可以使用参数封包当调用的函数有大量参数或者参数数量不定时可以使用参数拆包。1 函数参数的封包在《Python自定义函数的位置参数和关键字参数》中提到python函数的参数主要分为位置参数和关键字参数。针对这两种不同类型的参数封包的方式不同。1.1 位置参数的封包在函数定义中* 会把调用时传入的所有未匹配的位置参数封装打包成一个元组。代码如图1所示。图1 使用*封包参数的代码其中第1-4行代码定义了函数f()该函数的第三个参数*args表示将第3个参数到最后一个参数封装打包到元组args中。第6行代码调用自定义函数f()。代码运行的效果如图2所示。图2 代码运行效果1.2 关键字参数的封包** 会把调用时传入的所有未匹配的关键字参数打包成一个字典。代码如图3所示。图3 使用**封包参数的代码其中第1-4行代码定义了函数f()该函数的第三个参数**kwargs表示将第3个参数到最后一个参数封装打包到字典kwargs中。第6行代码调用自定义函数f()。代码运行的效果如图4所示。图4 代码运行效果注意1 在定义包含打包参数的函数时打包参数必须位于在参数列表中的最后。2 函数参数的拆包2.1 位置参数的拆包在函数调用时* 可以把一个列表、元组等可迭代对象拆解成独立的位置参数。代码如图5所示。图5 使用*拆包列表/元组的代码其中第1-2行代码自定义的函数f()有三个独立的参数。第6行调用该参数时将数组nums前面加上*实现参数的拆包。代码运行效果如图6所示。图6 代码运行效果注意2 拆包列表或元组时其元素个数必须与函数参数的个数相等。2.2 关键字参数的拆包** 可以把一个字典拆解成关键字参数。代码如图7所示。图7 使用**拆包字典的代码代码运行效果与图6相同。注意3 拆包字典时其元素个数必须与参数的个数相同并且字典每个元素的键值要和参数名对应相同。注意4 *args 和 **kwargs 只是约定俗成的名称星号后面的变量名可以任意如 *items, **options但推荐使用 args 和 kwargs。