之前的文章说明了变量的三大组成部分,详细说明了变量名与变量值,但是对于赋值这一块介绍相对较少,今天就来对这一部分进行补充,除了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]

  相较于前几种,各种类型嵌套解压赋值要稍微难理解一点,可以这样理解,相当于将列表的最后一个值,也就是元组取出来,再进行一次解压赋值;

***需要注意的是,通过星号表达式只能取两头的数据,可以是开头,也可以是结尾,还可以同时取开头与结尾,但是不能取中间的值;

python基础之赋值运算的更多相关文章

  1. 1.9 Python基础知识 - 数值运算

      一.数值运算 在Python中有丰富的算术运算,这使得Python在科学计算领域有着很高的地位,Python可以提供包括四则运算在内的各种算术运算. 算术运算符 运算符 含义 说明 优先级 实例 ...

  2. python基础(三元运算+深浅拷贝+函数参数)

    三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不 ...

  3. python基础之赋值/深copy/浅copy

    首先,不管是赋值还是深浅copy,都是针对那些可能会产生变化的值进行区分的,也就是对于数字,字符串来说,区分赋值,深浅copy是毫无意义的. 那么,让我们来对那些可变的像list set dict t ...

  4. Python基础之赋值与注释

    目录 1. 花式赋值 1.1 链式赋值 1.2 交叉赋值 1.3 交叉赋值(解压缩) 2. 注释 2.1 单行注释 2.2 多行注释 1. 花式赋值 1.1 链式赋值 a = 10 b = 10 c ...

  5. python基础之02列表/元组/字典/set集合

    python中内置的数据类型有列表(list)元组(tuple)字典(directory). 1 list list是一种可变的有序的集合.来看一个list实例: #第一种方法: >>&g ...

  6. python基础(9)增强型赋值与使用普通赋值的区别

    前言 增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知i += 1的效率往往要比 i = i + 1 更高一些(这里以 += 为例,实际上增强型赋值语句不仅限于此).所以我们会乐此不 ...

  7. python基础2(数据类型、数据运算、for循环、while循环、列表)

    1.数据类型 python使用对象模型来存储数据,每一个数据类型都有一个内置的类,每新建一个数据,实际就是一个对象,即所有数据都是对象. 对象的3个特性: 身份:即内存地址,可以用id()来获取 类型 ...

  8. Python基础0:变量 赋值 表达式和运算符

    变量: 前面我们在使用print()输出内容的时候,如果内容很长,后面要再次输出的时候,就需重新在输入一遍. 如果给输出的内容起个简单的别名.这样我们用简短的别名来代替长内容,下次要输出的时候就直接使 ...

  9. Python 基础篇:数据类型、数据运算、表达

    1. 数据类型 1.1 数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-231-231-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取 ...

随机推荐

  1. node cli & emoji

    node cli & emoji cli $ yarn add node-emoji $ npm i node-emoji https://github.com/omnidan/node-em ...

  2. AIoT & IoT

    AIoT & IoT Artificial Intelligence of Things Internet of Things AIoT === AI + IoT 人工智能物联网 === 人工 ...

  3. ES6 & import * & import default & import JSON

    ES6 & import * & import default & import JSON import json & default value bug api.js ...

  4. js currying function All In One

    js currying function All In One js 实现 (5).add(3).minus(2) 功能 例: 5 + 3 - 2,结果为 6 https://stackoverflo ...

  5. 联童科技基于incubator-dolphinscheduler从0到1构建大数据调度平台之路

    联童科技是一家智能化母婴童产业平台,从事母婴童行业以及互联网技术多年,拥有丰富的母婴门店运营和系统开发经验,在会员经营和商品经营方面,能够围绕会员需求,深入场景,更贴近合作伙伴和消费者,提供最优服务产 ...

  6. [Python] 茎叶图和复合饼图的画法

    目录 茎叶图 复合饼图 茎叶图 from itertools import groupby nums2=[225, 232,232,245,235,245,270,225,240,240,217,19 ...

  7. 五分钟快速上手MyBatis

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射. 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作. 可以通过简单的 XML 或注解来配置和映射,Ja ...

  8. Redis集群简介及部署

    1简介 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  9. DRF的orm多表关系补充及serializer子序列化

    目录 一.控制多表关系的字段属性 1.如何建立基表 2.断开连表关系 3.四种级联关系 二.子序列化 一.控制多表关系的字段属性 1.如何建立基表 要在基表中配置Meta,设置abstract=Tru ...

  10. ADT基础(一)—— List,Stack,and Queue

    ADT基础(一)-- List,Stack,and Queue 1 List 表示 数组:易于search,难于insert和remove 链表:难于search,易于insert和remove // ...