python解包-Python函数参数的打包和解包(超级详细)

在前面的教程中,我们介绍了两种可变参数的标记方式:利用一个星号*构建一个参数元组;利用两个星号**构建参数字典。

事实上,在函数参数传递过程中,还有一种看似类似实则不然的参数传递方式。说它“类似”,是因为在外观上它也在参数前打上一个星号*。说它“不然”,是因为这种操作的内涵不同:星号*是作用在实参上的;实参是有讲究的,这些实参主要包括列表、元组、集合、字典及其他可迭代对象。

如果在这类实参前面加上一个星号*,那么 Python 解释器就会对这些可迭代对象进行解包(unpacking,亦有文献译作“解压”),然后将解包后的元素一一分配给多个形参。

Python参数打包

说到解包,我们先介绍一下它的反操作——打包(packing),参见如下代码:

In [1]: val = 1, 2, 3, 4

In [2]: type(val)

Out[2]: tuple

In [3]: val

Out[3]: (1, 2, 3, 4)

在输入 In [1] 处,表达式等号的右边分别是四个零散的整型数 1, 2, 3, 4,然后赋值给了 val 对象。通过元组知识的学习,我们知道,Python 将等号右边的四个整型数“打包”成了一个匿名的元组,然后赋值给 val。

另一方面,Python 中变量的类型并不需要事先声明,而是通过赋值得到的。通过赋值操作,将等号右边的变量类型赋给等号左边的对象即可。如此一来,In [1] 处 val 的类型就被定义为一个元组了。

上述判断可从 Out[2] 的输出结果中得到印证。在输出 Out[2] 中,元组的另外一个标志——那对圆括号(

你可能感兴趣的:(python解包-Python函数参数的打包和解包(超级详细))