python基础之赋值运算
之前的文章说明了变量的三大组成部分,详细说明了变量名与变量值,但是对于赋值这一块介绍相对较少,今天就来对这一部分进行补充,除了egon老湿所讲之外,本喵还参阅了《python3-cookbook》中的内容,进行补充扩展。
一、基本赋值运算
= , += , -= , /= , %= , //=
这些基本的赋值运算不必多说,需要注意的是,“=”与前一个符号之间不能有空格。
二、交叉赋值
现在有两个变量x,y,分别对应3,4;现在需要将这两个变量的值进行交换,如何快速简明的实现呢?
x = 3 y = 4 x,y = y,x
这样,就可以轻松实现交叉赋值。但是,在复习时,我突发奇想,如果是三个呢?四个呢?交叉赋值还可以实现吗?来看实验↓
>>> x = "x" >>> y = "y" >>> z = "z" >>> x,y,z = y,z,x >>> x 'y' >>> y 'z' >>> z 'x' >>>
看来3个变量没有问题,那7个呢?
>>> x = 1 >>> y = 2 >>> z = 3 >>> m = 4 >>> n = 5 >>> a = 6 >>> b = 7 >>> x,y,z,m,n,a,b = b,a,n,m,z,y,x >>> x 7 >>> y 6 >>> z 5 >>> m 4 >>> n 3 >>> a 2 >>> b 1
看来交叉赋值在变量个数上没有限制,但是变量太多的情况下,交叉赋值可以,但没必要,因为一不小心就会出错。
三、解压赋值
重点说明一下解压赋值。当你有一个列表时,需要取出里面的值,按照传统方法该怎么取呢?
# 传统方法 list = [1.1,2.2,3.3,4.4] x1 = list[0] x2 = list[1] x3 = list[2] x4 = list[4]
按照“笨方法”,可以通过列表索引进行分别取值,但是解压赋值显得更加简单。
# 解压赋值 list = [1.1,2.2,3.3,4.4] x1,x2,x3,x4 = list
可以看到只需要一行代码即可实现上面四行代码的功能。但是需要注意,这种方法变量名的数量需要和列表中值的个数相对应,否则就会报错;
如果不知道列表的个数,或者数量太多,该怎么赋值呢?这就需要用到星号表达式“*”,为了方便看到结果,下面就以交互式结果展示;
>>> list = [1,2,3,4,5,6] >>> x, *_, y = list >>> x 1 >>> y 6 >>> _ [2, 3, 4, 5]
可以看到,当解压赋值出现“*”时,python就会将中间咱们暂时不要的值,以列表的形式赋值给“_”,注意理解这句话,值的类型是列表,变量名是“_”,当然星号后面可以跟任何一个变量名,但是一般使用"_"或者ign(ignore)表示暂时不需要的值。
只有列表可以吗?
- 元组
>>> test = (1,2,3,4,5) >>> x, *_,y = test >>> x 1 >>> y 5 >>> _ [2, 3, 4]
- 字典
>>> dict = { "name":"zhangdada","age":15,"gender":"male","money":0}
>>> x, *_, y = dict
>>> x
'name'
>>> y
'money'
>>> _
['age', 'gender']
需要注意的是,字典在解压赋值取出的是key,而不是key:value的键值对。
- 字符串
>>> str = "woshizhangdada" >>> x, *_, y = str >>> x 'w' >>> y 'a' >>> _ ['o', 's', 'h', 'i', 'z', 'h', 'a', 'n', 'g', 'd', 'a', 'd']
字符串居然也可以,而且是按照字符串的每一个字符进行解压赋值,通过这个方法,说不定以后可以玩出更多花样
- 如果是各种类型进行嵌套呢?
>>> test1 = [1,2,3,("aa",3,0)] >>> x, *_,(*_,y) = test1 >>> x 1 >>> y 0 >>> x, *ign,(*_,y) = test1 >>> x 1 >>> y 0 >>> ign [2, 3] >>> _ ['aa', 3]
相较于前几种,各种类型嵌套解压赋值要稍微难理解一点,可以这样理解,相当于将列表的最后一个值,也就是元组取出来,再进行一次解压赋值;
***需要注意的是,通过星号表达式只能取两头的数据,可以是开头,也可以是结尾,还可以同时取开头与结尾,但是不能取中间的值;

浙公网安备 33010602011771号