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]
相较于前几种,各种类型嵌套解压赋值要稍微难理解一点,可以这样理解,相当于将列表的最后一个值,也就是元组取出来,再进行一次解压赋值;
***需要注意的是,通过星号表达式只能取两头的数据,可以是开头,也可以是结尾,还可以同时取开头与结尾,但是不能取中间的值;
python基础之赋值运算的更多相关文章
- 1.9 Python基础知识 - 数值运算
一.数值运算 在Python中有丰富的算术运算,这使得Python在科学计算领域有着很高的地位,Python可以提供包括四则运算在内的各种算术运算. 算术运算符 运算符 含义 说明 优先级 实例 ...
- python基础(三元运算+深浅拷贝+函数参数)
三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不 ...
- python基础之赋值/深copy/浅copy
首先,不管是赋值还是深浅copy,都是针对那些可能会产生变化的值进行区分的,也就是对于数字,字符串来说,区分赋值,深浅copy是毫无意义的. 那么,让我们来对那些可变的像list set dict t ...
- Python基础之赋值与注释
目录 1. 花式赋值 1.1 链式赋值 1.2 交叉赋值 1.3 交叉赋值(解压缩) 2. 注释 2.1 单行注释 2.2 多行注释 1. 花式赋值 1.1 链式赋值 a = 10 b = 10 c ...
- python基础之02列表/元组/字典/set集合
python中内置的数据类型有列表(list)元组(tuple)字典(directory). 1 list list是一种可变的有序的集合.来看一个list实例: #第一种方法: >>&g ...
- python基础(9)增强型赋值与使用普通赋值的区别
前言 增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知i += 1的效率往往要比 i = i + 1 更高一些(这里以 += 为例,实际上增强型赋值语句不仅限于此).所以我们会乐此不 ...
- python基础2(数据类型、数据运算、for循环、while循环、列表)
1.数据类型 python使用对象模型来存储数据,每一个数据类型都有一个内置的类,每新建一个数据,实际就是一个对象,即所有数据都是对象. 对象的3个特性: 身份:即内存地址,可以用id()来获取 类型 ...
- Python基础0:变量 赋值 表达式和运算符
变量: 前面我们在使用print()输出内容的时候,如果内容很长,后面要再次输出的时候,就需重新在输入一遍. 如果给输出的内容起个简单的别名.这样我们用简短的别名来代替长内容,下次要输出的时候就直接使 ...
- Python 基础篇:数据类型、数据运算、表达
1. 数据类型 1.1 数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-231-231-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取 ...
随机推荐
- IT-ebooks free download website & IT 电子书籍免费下载网站
free ebooks of programming 1. http://www.it-ebooks.info/ http://www.it-ebooks-api.info/ 2. http://ww ...
- Node.js 实战 & 最佳 Express 项目架构
Node.js 实战 & 最佳 Express 项目架构 Express Koa refs https://github.com/xgqfrms/learn-node.js-by-practi ...
- macOS utils
macOS utils dr.unarchiver https://dr-unarchiver.en.softonic.com/mac https://dr-unarchiver.en.softoni ...
- npm & private npm service & nrm & nvm
npm & private npm service & nrm & nvm npm server # nrm https://www.cnblogs.com/xgqfrms/t ...
- SVG & gradient & color
SVG & gradient & color https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Gradients & ...
- uniapp vue mixin使用
这个mixin的翻版,主要用来分离处理列表数据逻辑 我用了覆写模式 创建mixin ListMoreDataMixin // 由于没有超类的限制这里要判断下 function ____checkGet ...
- C/C++子函数参数传递,堆栈帧、堆栈参数详解
本文转载自C/C++子函数参数传递,堆栈帧.堆栈参数详解 导语 因为参数传递和汇编语言有很大联系,之后会出现较多x86汇编代码. 该文会先讲一下x86的堆栈参数传递过程,然后再分析C/C++子函数是怎 ...
- JDK源码阅读-RandomAccessFile
本文转载自JDK源码阅读-RandomAccessFile 导语 FileInputStream只能用于读取文件,FileOutputStream只能用于写入文件,而对于同时读取文件,并且需要随意移动 ...
- C++使用libcurl进行http通讯
借着curl 7.75.0版本更新, 最近又下载下来玩了玩, 在此做个简单记录 1.环境搭建 首先是libcurl动态库, 自己下载源码编译的话如果要使用https协议还要下载OpenSSL和libs ...
- winform解析json API数据
{ "retCode" : "SUCCESS", "msg" : "", "data" : { ...