Python 变量的知识补充

定义多个变量

在Python中,由于变量的特性,同一个对象可以被赋予多个变量名。例如下面的代码,执行后,变量 a、b、c 都是1。

就像一个杯子上贴了不同的标签。

ini 复制代码
a = 1
b = c = a
print(a)  # 输出结果 1
print(b)  # 输出结果 1
print(c)  # 输出结果 1

程序执行顺序为:

  1. 将数字 1 放入一个对象容器。

  2. 指定这个对象的名字为 a(变量 a = 1)。

  3. 让这个对象名字也有 b 和 c。

  4. 打印变量 a、b、c 的内容。

如果想要一次性定义多个变量的名字和内容,可以使用逗号分隔名字和内容(注意变量的数量要和赋值的数量相同)。例如,下面的代码,只用了一行就定义了 a、b、c 三个变量。

bash 复制代码
a, b, c = 1, 2, 3
print(a)   # 1
print(b)   # 2
print(c)   # 3

定义多个变量的陷阱

如果变量的内容是列表、字典或集合,在对**「多个变量同时赋值」**时容易遇到陷阱。当多个变量同时指向一个列表、字典或集合时,只要变量内容被修改(并非使用等号赋值),不论这个变量是全局还是局部变量,另一个变量内容也会跟着变动。

例如,下面的代码中,变量 a 使用 append 方法修改列表内容,就会造成 a 和 b 的内容同时被修改。但如果 c 是使用等号再次声明赋值的,c 和 d 就会指向不同的内容。

scss 复制代码
a = []
b = a
a.append(1)
print(a)    # [1]
print(b)    # [1]   # 受影响
c = []
d = c
c = [1]
print(c)    # [1]
print(d)    # []    # 不受影响

变量覆盖

在同一个作用域内,变量名是唯一的。如果重复使用变量名,实际上是将该变量名重新指向另一个对象。例如,下面的代码执行后会打印数字 2 和 1。

ini 复制代码
a = 1
b = a
a = 2
print(a)  # 输出结果为 2
print(b)  # 输出结果为 11

程序执行的步骤如下:

  1. 将数字 1 放入一个对象容器中。

  2. 给这个对象指定一个名字,即变量 a(即 a = 1)。

  3. 让变量 b 指向变量 a 所指向的对象。

  4. 将数字 2 放入一个对象容器中,并将这个对象的名字指定为 a(即将标签 a 从数字 1 的盒子上撕下来,贴到数字 2 的盒子上)。

  5. 打印变量 a 和变量 b 所指向的对象的内容。

交换变量

在其他编程语言中,如果想要交换两个变量的值,通常会用另一个变量来暂存要交换的数值。在 Python 中,可以一次性进行多个变量的交换。下面的例子会将 a、b、c 的值交换成 b、c、a。

ini 复制代码
a = 1
b = 2
c = 3
print(a, b, c)     # 1, 2, 3
a, b, c = b, c, a  # 交换内容
print(a, b, c)     # 2, 3, 1

在变量赋值时,如果变量内容涉及运算,同样会采用交换变量的方式来处理,以当前变量的实时内容为准。下面的例子虽然看上去很相似,但由于 a 和 b 采取了交换变量的方法,所以在执行 a+b 运算时,a 的值为 1;而 c 和 d 是按照常规顺序赋值的,因此在计算 c+d 时,c 的值已经发生了变化。

ini 复制代码
a = 1
b = 2
a, b = b, a+b
print(a, b)    # 2, 3

c = 1
d = 2
c = d
d = c + d
print(c, d)    # 2, 4

好的变量名称

在给变量命名时,需要尽量做到见名知意:看到变量的名字,就知道是存储什么数据。因此,变量名如果取得不好,程序就会难以理解。Python 官方文档提供了以下几个变量名的建议:

  • 建议使用小写英文字母 ,例如score。如果需要组合多个英文单词,可以在单词之间加上下划线,例如:english_score

  • 如果变量的内容不需要被修改 (其他编程语言称为"常量",即内容不会改变的数),变量名建议全部用大写英文字母 ,例如MAX_NUMBER

  • 如果变量名包含专有名词,例如HTTPAPP,就使用原来的大小写格式,例如HTTP_portAPP_port

相关推荐
也无晴也无风雨44 分钟前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
阿斯卡码1 小时前
jupyter添加、删除、查看内核
ide·python·jupyter
埃菲尔铁塔_CV算法4 小时前
图像算法之 OCR 识别算法:原理与应用场景
图像处理·python·计算机视觉
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
人工智能·python·机器学习·数据挖掘
2401_857610034 小时前
多维视角下的知识管理:Spring Boot应用
java·spring boot·后端
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-2.技术栈
人工智能·python·机器学习·数据挖掘
代码小鑫4 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计
love_and_hope5 小时前
Pytorch学习--神经网络--完整的模型训练套路
人工智能·pytorch·python·深度学习·神经网络·学习
颜淡慕潇5 小时前
【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
后端·云原生·容器·kubernetes·问题解决
在人间负债^6 小时前
基于标签相关性的多标签学习
人工智能·python·chatgpt·大模型·图像类型