python中赋值语句教程

这篇具有很好参考价值的文章主要介绍了python中赋值语句教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 赋值语句的特点

  • 赋值语句创建对象的引用:赋值语句总是创建对象的引用,而不是复制对象。因此,Python中的变量更像是指针,而不是数据储存区域。
  • 变量在首次赋值时会被创建:因此不需要提前声明变量。
  • 变量在引用前必须先赋值:如果引用未赋值的变量会报错

2. 赋值语句的形式

(1. 普通形式

>>> a = 'abc'          # 普通形式
>>> b = 123
>>> c = [1, 2, 3]

(2. 序列赋值

python中"="的右侧可以接受任意类型的序列,也可以是可迭代的对象,只要长度等于左侧序列即可。

>>> (a, b) = ('1', '2')   # 元组赋值,括号可省略
>>> [a, b] = ['1', '2']   # 列表赋值
>>> a, b, c, d = 'spam'   # 字符串序列赋值

# python中交换两个变量的值可以不用穿件第三个临时变量
>>> x, y = 1, 2
>>> x, y = y, x
>>> x, y
(2, 1)

# 当等号左侧与右侧变量长度不一致时,考虑用分片解决
>>> num = '123'
>>> a, b = num[:1], num[1:]
>>> a, b
('1', '23')

>>> num = '123'
>>> a, b = list(num[:1]) + [num[1:]]
>>> a, b
('1', '23')

# 嵌套赋值
>>> ((a, b), c) = ('12','3')
>>> a, b, c
('1', '2', '3')

3.扩展序列解包(*)

*X:序列赋值时,带有*的名称会被赋值一个列表,该列表收集序列中剩下的没被赋值给其他名称的所有项,可用于=左右两侧变量数目不同的情况。

>>> num = [1, 2, 3, 4]
>>> a, b = num   # 变量个数不同会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)  

>>> a, *b = num   # 扩展序列解包
>>> a, b
(1, [2, 3, 4])

>>> first, *mid, last = num  # 扩展序列解包的*可以出现在任何位置
>>> first, mid, last
(1, [2, 3], 4)

边界情况(特殊情况)
(1. 带星号的名称值匹配到单个项,但仍然返回一个列表

>>> a = [1, 2, 3, 4]
>>> b, c, d, *e = a
>>> (b, c, d, e)
(1, 2, 3, [4])

(2. 若带星号的名称不能匹配到任何项,则返回一个空列表

>>> a = [1, 2, 3, 4]
>>> b, c, d, e, *f = a
>>> (b, c, d, e, f)
(1, 2, 3, 4, [])

(3. 若用了多个带星号的名称则会报错

>>> a = [1, 2, 3, 4]
>>> *b, c, *d = a
  File "<stdin>", line 1
SyntaxError: two starred expressions in assignment

(4. 带星号的名称没有被编写到一个列表中会报错

>>> a = [1, 2, 3, 4]
>>> *b = a
  File "<stdin>", line 1
SyntaxError: starred assignment target must be in a list or tuple

>>> *b, = a
>>> b
[1, 2, 3, 4]

4. 多目标赋值(连续赋值)

多目标赋值即将最右侧的对象依次赋值给左侧所有的名称。

>>> a = b = c = 0
>>> (a, b, c)
(0, 0, 0)

多目标赋值的共享引用问题

多目标赋值其实是多个目标对同一个内存空间的引用,这里要分两种情况,当被引用对象是不可变对象时则不存在问题;但是如果多目标都引用了同一个可变对象,则会出现问题文章来源地址https://www.toymoban.com/news/detail-760340.html

>>> a = b = 1
>>> (a, b)
(1, 1)
>>> b = 2
>>> (a, b)
(1, 2)
# a的值没有因为b的改变而改变
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
>>> a = b = [1, 2]
>>> (a, b)
([1, 2], [1, 2])
>>> b[1] = 3
>>> (a, b)
([1, 3], [1, 3])
# a的值随着b值得改变而改变,即使没有主动给a赋值,这是因为a,b同时引用了一个可变对象,改变该对象则会通知改变a和b的值

到了这里,关于python中赋值语句教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog语法——6.测试文件使用for和random语句进行赋值

    参考资料 【明德扬_verilog零基础入门语法HDL仿真快速掌握-手把手教你写FPGA/ASIC代码设计流程中的应用】 题目要求: 涉及到for语句的赋值语句: 小贴士 verilog不支持c/c++中的自增语句i++,因此只能写成i=i+1 for语句应该用在initial begin(…) end中,此处只展示关键代码 6.2.1 random语句

    2024年01月17日
    浏览(42)
  • Python教程(15)——Python流程控制语句详解

    Python流程控制是Python编程中非常重要的一部分,它用于控制程序的执行流程。Python提供了多种流程控制语句,包括if语句、while循环、for循环、break和continue语句等。这种流程控制在各个语言中都是大同小异的,如果你已经学过其他的语言,那么这章节就可以直接跳过。 if语句

    2024年02月08日
    浏览(39)
  • Python入门教程 - 判断语句(二)

    目录 一、布尔类型 二、比较运算符 三、if判断语句 True False 比较运算的结果是布尔类型。 if 要判断的条件:     条件成立时,要做的事情 if 要判断的条件:     条件成立时,要做的事情 else:     条件不成立时,要做的事情  if 条件1:     条件1成立时,要做的事情 elif 条

    2024年02月10日
    浏览(38)
  • 【python】Python基础语法详细教程以及案例教学之 while循环语句、while语句嵌套应用、for循环语句、for语句嵌套应用、循环中断

    目录  前言 一、while循环的基础语法  1)什么是while语句?  2)如何具体实现while语句? 二、while循环的基础案例 1)案例一:  2)案例二: 三、while循环的嵌套应用 1)学习目标: 2)什么是while循环的嵌套 3)如何实现while嵌套? 四、while循环的嵌套案例 1)学习目标 2)补充

    2024年01月25日
    浏览(60)
  • openCV 图像对象的创建和赋值

    赋值操作是将一个cv::Mat对象的数据复制到另一个对象中。赋值操作使用的是浅拷贝(shallow copy),即两个对象共享相同的数据内存。这意味着对一个对象的修改会影响到另一个对象 克隆操作是创建一个新的cv::Mat对象,并复制源对象的数据到新对象中。克隆操作使用的是深拷

    2024年02月13日
    浏览(30)
  • Java创建数组、赋值的四种方式,声明+创建+初始化 详解

    以int数据类型为例 注意: new 数据类型[]{},其中花括号可以省去,但要在[ ]中填写数组的个数; 创建多维数组时 new后面第一个方括号中的元素数量不能省略 1、一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 推荐使用第一种格式,因为第一种格式具有更好的可读性,表

    2024年04月11日
    浏览(55)
  • [Golang实战] gorm中使用Raw()和 Exec() 两种方式操作sql原生语句的特点和区别

    当我在gorm中使用原生sql操作数据库时,时常用raw() 和 exec() ,有时候经常遇到数据插不进去或者 数据帮i当不到结构体,原来是 这两个方法有不同的用处和特点 个人理解: 需要查询数据 映射到结构体时使用 官方理解: DB.Raw() 方法用于执行原始 SQL 查询语句或可执行的命令。

    2024年02月13日
    浏览(48)
  • 顺序表创建,初始化,赋值,取值,查找,插入与删除(附小例题)

    由n(n≥0)个数据结构相同的元素构成的有限序列。 1)除了第一个元素外,结构中的每一个数据元素均只有一个前驱 2)除了最后一个元素外,结构中的每一个数据元素均只有一个后驱 用一组地址 连续的存储单元依次 存储线性表的数据元素。 优点 : 随机存储 缺点 :在做插

    2024年02月07日
    浏览(43)
  • C++之STL整理(3)之map 用法(创建、赋值、方法)整理

    注:整理一些突然学到的C++知识,随时mark一下 例如:忘记的用法,新,新数据结构 提示:本文为 C++ 中 map构造、赋值、接口 的写法和举例   STL 中的map是一个关联容器,它存储的元素都是 键值对 (key-value pair),并且 根据键(key)自动排序的容器 。map不允

    2024年04月26日
    浏览(32)
  • Verilog基础:时序调度中的竞争(二)(创建分频时钟时,使用阻塞赋值)

    相关阅读 Verilog基础 https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482         作为一个硬件描述语言,Verilog HDL常常需要使用语句描述并行执行的电路,但其实在仿真器的底层,这些并行执行的语句是有先后顺序的,然而Verilog标准并没有将这些事件调度的

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包