CodingGo技术社区
自由的编程学习平台
python中的解包可以这样理解:一个list是一个整体,想把list中每个元素当成一个个个体剥离出来,这个过程就是解包,我们来看下面这些例子(分为10个部分)。
1.将list中每个元素赋值给一个变量
2.可迭代对象都可以这样做
如果可迭代对象包含的元素和前面待赋值变量数量不一致,则会报错。但是可以通过*来表示多个元素
3.星号的使用
比如我们要计算平均分,去除最高分和最低分,除了用切片,还可以用解包的方式获得中间的数值
用*来表示多个数值
4.压包过程
压包是解包的逆过程,用zip函数实现,下面例子可以对压包有一个直观的感受
5.压包与解包混合的例子
下面例子实现:两个列表对应数值相加
细细拆解上面过程,可以看出步骤是这样的
先是zip函数将a b压包成为一个可迭代对象
对可迭代对象的每一个元素(('a', 1))进行解包(i, j = ('a', 1))
此时就可以分别调用i j变量进行计算 下面我们加入星号
6._的用法
当一些元素不用时,用_表示是更好的写法,可以让读代码的人知道这个元素是不要的
7.多变量同时赋值
之前赋值符号右侧都是可迭代对象,其实右侧也可以是多个变量
下面用法都会报错
可以这样
8.*之可变参数
函数定义时,我们使用*的可变参数,其实也是压包解包过程
参数用*num表示,num变量就可以当成元组调用了。
其实这个过程相当于*num, = 1,2,5,6
9.*之关键字参数
键值对传入**kw,kw就可以表示相应字典。
**的用法只在函数定义中使用,不能这样使用
10.可变参数与关键字参数的细节问题
(1)函数传入实参时,可变参数(*)之前的参数不能指定参数名
(2)函数传入实参时,可变参数(*)之后的参数必须指定参数名,否则就会被归到可变参数之中
如果一个函数想要使用时必须明确指定参数名,可以将所有参数都放在可变参数之后,而可变参数不用管它就可以,也不用命名,如下
可变参数的这两条特性,可以用于将 只需要按照位置赋值的参数 和 需要明确指定参数名的参数区分开来
(3)关键字参数都只能作为最后一个参数,前面的参数按照位置赋值还是名称赋值都可以
下面展示一个既用可变参数有用关键字参数的例子
(4)可变参数与关键词参数共同使用以表示任意参数
下面是这一点在装饰器当中的使用
(如果有的读者不熟悉装饰器,只需要知道,使用@定义myfun相当于myfun = mydecorator(myfun),定义出来的myfun其实是返回结果wrapper函数)
wrapper函数使用args, *kw作为参数,则被修饰的myfun函数需要的参数无论是什么样的,传入wrapper都不会报错,这保证了装饰器可以修饰各种各样函数的灵活性。毕竟我们一般在函数中传入参数时,要么所有参数名都写,要么前面几个不写,后面的会写,这样使用args, *kw完全没有问题。
11.解包作为参数传入函数中
首先定义一个函数
列表元组的解包
字典的解包
一个应用
12.多返回值函数
下面过程也涉及到了解包
其实本身是一个元组
Dwzb,对数据分析很感兴趣,课余学习统计软件R和python。关注科技,互联网的发展与变革
专栏:https://zhuanlan.zhihu.com/python-programming
领取专属 10元无门槛券
私享最新 技术干货