2.1 变量的命名与使用
变量来源于数学,在计算机语言中能储存计算结果或表示值的抽象概念。变量可以通过变量名设定,大多数情况下,变量是可变的。在计算机编程里面,变量是非常有用的,它对每一段数据都赋给一个简短、易于记忆的名字,这个数据可以是用户输入的数据、特定运算的结果以及程序输出数据等。简而言之,变量是用于跟踪所有数据的简单工具。
Python的变量与其他编程有所区别,如Java和C#,这类编程语言需要定义变量类型才能对变量进行使用。而Python的变量无需定义变量类型,直接对变量赋值即可,Python会根据变量值来自动识别变量类型。
变量类型包含了数据类型,数据类型会在第3章详细介绍,常用变量类型的种类有整型、字符串、浮点型、布尔型、字典和元组列表等。简单地理解,变量可以比作为一个人,而人又分为男人和女人,这里的男人和女人就相当于变量类型,是根据性别的不同进行分类的,而变量类型则是根据变量值的不同进行分类的。
了解了变量和变量类型后,接下来学习Python的变量如何定义及使用。我们在PyCharm下输入以下代码:
在PyCharm中运行上述代码,查看代码输出结果,如图2-1所示。
图2-1 输出结果
上述代码中,我们分别定义了4个不同类型的变量,比如变量iVariable,变量首个字母i代表变量类型为整型(int),Variable代表变量。变量命名一般遵从以下规则:
(1)变量名只能是字母(A-Z,a-z)、数字(0-9)或下划线。
(2)第一个字母不能是数字,例如2Variable,这不是一个合法的变量。
(3)不能是Python关键字,例如不能用class这个单词来命名一个变量。
(4)区分大小写,例如iA和ia是两个不同的变量。
理论上,在遵守了上面几条规则的前提下,所命名的变量都是合法的,有时变量命名尽管是合法的,但可读性非常差也不可取,所以,在实际编程中,变量命名往往都有自己的一个命名规范,本书介绍一种常见的命名规范:
(1)一个单词作为变量时,单词首个字母建议大写,并在单词最前方添加变量类型,如上述的iVariable。
(2)如果变量由多个单词组成,每个单词首个字母大写,单词直接拼接并在单词最前方添加变量类型,如iMyVariable。
(3)如果不想在变量前添加变量类型,变量首个字母为小写,若有多个单词拼接,则拼接的单词首个字母为大写,如variable或myVariable。
了解了变量的命名后,下一步我们来介绍变量的使用。从上述代码中,我们将变量值进行输出,这个输出过程就是变量的使用。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。比如执行“print('变量为:', variable)”这一行代码,程序执行时会提示错误信息“NameError: name 'variable' is not defined”,这是由于变量variable没有赋值,所以程序执行过程中并没有创建变量variable而提示variable没有被定义的错误信息。
Python还支持多个变量同时赋值,多变量赋值主要有两种方式,第一种赋值方式是首先创建一个整型对象,其值为1,然后对变量a、b、c进行赋值;第二种赋值方式是分别创建三个不同类型的对象,然后分别赋值给变量d、e、f。代码如下:
变量的命名与使用相对较为简单,读者只需掌握变量的命名规则以及使用方式即可。最后上述提及到不能使用Python关键字作为变量名,Python中共有33个关键字,这些关键字都不可当作变量名来使用,如表2-1所示。
表2-1 Python关键字
2.2 变量的深浅拷贝
变量的拷贝是对变量进行数据处理的时候,为了保留数据处理前的变量而重新定义新的变量,简单来说,就是将一个变量的数据复制到另外一个变量里。我们可以通过代码的形式加以说明:
a = 'hello World' b = a print(b) # 程序输出hello World
通过b=a这种方式将字符串“hello World”分别赋值给变量a和变量b。变量的拷贝主要分为浅拷贝和深拷贝,这两种拷贝方式主要用于数据类型为列表和字典的变量。
在第2.1节中,我们提到数据类型主要有整型、字符串、浮点型、布尔型、字典和元组列表等。本节以列表为例,列表可以理解为队列,如现实生活中的排队购票,这个队伍可理解为Python的列表,而队伍中每一个人可理解为列表的元素。
现在将列表以代码的形式表示,并由变量list_1表示,然后通过浅拷贝的方式赋值给list_2,最后修改list_2的某个元素,观察变量list_1和list_2的具体变化。代码如下:
上述代码涉及到列表的使用、功能模块的导入和函数的调用,这些都是Python的基础语法之一,具体的使用说明会在后续的章节中详细讲述。本节主要讲述变量list_1的值为列表或字典的时候,通过list_2=list_1的浅拷贝,当某个变量的列表元素发生变化时,观察另外一个变量的变化情况。上述代码的输出结果如图2-2所示。
图2-2 变量浅拷贝的输出结果
从图中可以看到,如果变量a是一个列表或字典,并且通过浅拷贝的方式生成变量b,当其中一个变量发生改变时,另外一个变量也会随之变化。
在上述条件下,如果其中一个变量发生改变,另外一个变量不会随之变化,这样可以使用深拷贝的方式实现。根据上述代码进行简单的修改即可实现,代码如下:
将上述代码运行输出,查看变量list_1和变量list_2的变化情况,从输出结果可以看到,当修改变量list_2某个元素的时候,变量list_1不会发生任何变化。输出结果如图2-3所示。
图2-3 变量深拷贝的输出结果
本节主要讲述变量深浅拷贝的使用,深浅拷贝只适用于变量值为列表或字典的变量,在日常开发中,开发者常常会由于一时大意而忽略深浅拷贝的区别,导致程序出现错误而无法查明原因,因此读者要明确区分深浅拷贝的差异。