变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。变量在程序中就是用一个变量名表示,变量名必须是大小写英文、数字和_
的组合,且不能用数字开头。总之,记住一句话:变量无类型,对象有类型。怎么理解?比如:
>>> a = 5
>>> a
5
在以上的例子中,a
为变量名,=
为赋值语句,5就是整型对象。在计算机中,程序会开辟出一个内存空间来存储整型对象5,然后将变量a
指向该对象(实际上是指向该对象内存地址)。变量还可以是字符串、布尔类型等等。
>>> b = 'Python'
>>> b
'Python'
>>> c = True
>>> type(c)
<class 'bool'>
像Python这种变量本身类型不固定的语言称之为动态语言,与之对应的就是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下:
int a = 123 //a是整数类型变量
a = "abc" //错误:不能把字符串赋给整型变量
与静态语言相比,动态语言更灵活就是这个原因。但是需要注意的一点是,不要把赋值语句符号等同于数学的等号。比如:
x = 2
x = x + 2
如果从数学上去理解x = x + 2
那是想破头都解释不了的。在程序中,是这样的:赋值语句先计算右边的表达式x + 2
,得到结果4,再赋给变量x
,所以此时变量x
的值就是4了,而不再是之前的2。
接下来,通过一个例子更好的理解变量在计算机内存中的表示。如上面所说的,a = 5
,实际上,Python解释器做了两件事情:
- 在内存中创建了一个
5
的整数型数据对象 - 在内存中创建了一个名为
a
的变量,并把它指向5
a = 'abc'
b = a
a = 'def'
print(b)
在上面的例子中,变量b
的输出到底是abc
还是def
呢?让我们一步一步来分析:
首先,执行a = 'abc'
,解释器创建字符串abc
和变量a
,并把a
指向abc
;接着执行b = a
,解释器创建了变量b
,并把b
指向a
所指向的字符串abc
;然后再执行a = 'def'
,解释器创建了字符串def
,并把a
的指向改指为def
,但b
的指向并没有改变。因此最后打印出来的变量b
的结果自然是abc
。
常量
所谓常量就是不能改变的变量,比如常用的数学常数π
就是一个常量。在Python中,通常会用全部大写的变量名表示常量:
PI = 3.14159265359
但事实上,PI
仍然是一个变量,Python中根本没有任何机制保证PI
不会被改变,用全部大写的变量名来表示常量只是一个约定成俗、习惯上的用法。它不同与Java有特定的机制保证声明了常量后不会被改变。