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

    TypeScript 4.x Tutorials TypeScript 4.x 最新教程 https://typescript-4x-tutorials.xgqfrms.xyz/ https://gi ...

  2. onsen & UI & vue & mobile UI

    onsen & UI vue & mobile UI $ npm i onsenui vue-onsenui # OR $ npm i -S onsenui vue-onsenui h ...

  3. ruby & rvm

    ruby & rvm https://rvm.io/ Ruby Version Manager (RVM) RVM is a command-line tool which allows yo ...

  4. full stack & front end

    full stack & front end https://github.com/frank-lam/fullstack-tutorial https://github.com/haizli ...

  5. js & sort array object

    js & sort array object sort array object in js https://flaviocopes.com/how-to-sort-array-of-obje ...

  6. js 创建XML

    // 创建xml数据 let doc = document.implementation.createDocument('', 'root', null); // 创建一个文档 let root =d ...

  7. NGK算力持有好处多多!SPC、VAST等免费拿!

    众所周知,NGK是分布式存储的,作为Web3.0以及数字经济时代的基础设施,为数字加密市场带来了全新的商业模式和经济业态,但是,这只是一个重要的起点,真正的价值还在后面! 为了满足NGK生态建设者强烈 ...

  8. NGK全球启动大会圆满落幕

    加州时间2020年11月25日,NGK全球启动大会在美国硅谷圆满落幕.本次NGK全球启动大会为NGK正式在全球上线拉开了序幕. 百余位受邀嘉宾出席了本次NGK全球启动大会,其中包括NGK创始人.星盟投 ...

  9. node_puppeteer无界爬虫

    环境:node----v14.5.0 vscode----2019 依赖库 (需要自行设置好目录结构,否则会报目录错误) const puppeteer = require("puppete ...

  10. vue-eahars生产编译报错

    { test: /\.js$/, loader: 'babel-loader', include: [resolve('src'), resolve('test'), resolve('node_mo ...