四 【基础】常量与变量
变量:在程序运行过程中,值会发生变化的量
常量:在程序运行过程中,值不会发生变化的量
无论是变量还是常量,在创建时都会在内存中开辟一块空间,用于保存它的值。
1. 变量不需要声明类型
Python 的变量和常量不需要事先声明类型,这是根据Python的动态语言特性而来。
例如下面的 age
和 name
两个变量,在使用前没有进行任何的诸如 age int
和 name string
的类型声明,而这在一些静态语言中,比如 JAVA 和 Golang 中是必须的。
>>> age = 18
>>> name = "王炳明"
>>>
2. 赋值与比较
Python 中 用 =
号来给变量赋值,比如下面这个表达式,age 这个变量的值就是 18
>>> age = 18
与之相似的,新手会容易混淆的是 两个等号 ==
,它表示的是比较两个值是否相等,如果相等返回 True
,如果不相等返回 False
>>> age = 18
>>> age == 18
True
>>> age == 17
False
3. 先创建再使用
每个变量在使用前都必须赋值,变量赋值以后才会被创建。
新的变量通过赋值的动作,创建并开辟内存空间,保存值。
如果没有赋值而直接使用,会抛出变量未定义的异常。例如:
>>> age
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
>>>
>>> age = 18
>>> age
18
4. 赋值的方式
赋值的两种方式
第一种:单个直接赋值
>>> age = 18
>>> age
18
第二种:多个批量赋值
>>> a = b = c = 1
>>> a
1
>>> b
1
>>> c
1
第三种:先计算再赋值
# 先计算 17+1,再把结果赋值给age
>>> age = 17+1
>>> age
18
第四种:分别赋值
>>> a, b, c = 1, 2, 3
>>> a
1
>>> b
2
>>> c
3
5. 理解赋值的背后
理解变量在计算机内存中的表示也非常重要。
当我们写:a = "Jack"
时,Python解释器干了两件事情:
-
在内存中创建了一个
'Jack'
的字符串对象; -
在内存中创建了一个名为a的变量,并把它指向
'Jack'
。
而当你把一个变量a赋值给另一个变量b,这个操作实际上是将变量b指向变量a所指向的数据,例如下面的代码:
>>> a = "Jack"
>>> a
'Jack'
>>> b = a
>>> b
'Jack'
>>> id(a)
4332916664
>>> id(b)
4332916664
通过 id()
可以查看变量值的内存地址,打印出来的 a 和 b的内存地址是一样的,因此二者其实是一个数据。
但如果继续对 a 进行赋值其他值, 会发现 a 的内存地址变了,而 b 的并没有变
>>> a = "Tom"
>>> a
'Tom'
>>> id(a)
4332974128
>>> id(b)
4332916664
请牢记:Python中的一切都是对象,变量是对象的引用!:
- 执行a = ‘Jack’,解释器创建字符串‘Jack’对象和变量a,并把a指向‘Jack’对象;
- 执行b = a,解释器创建变量b,并且将其指向变量a指向的字符串‘Jack’对象;
- 执行a = ‘Tom’,解释器创建字符串‘Tom’对象,并把a改为指向‘Tom’对象,与b无关。
6. 简单介绍常量
说完变量,还要说下常量。
常量就是不变的变量,比如常用的数学常数圆周率就是一个常量。在Python中,通常用全部大写的变量名表示常量:
>>> PI = 3.14159265359
>>> PI
3.14159265359
但事实上,从Python语法角度看,PI仍然是一个变量,因为Python根本没有任何机制保证PI不会被改变。你完全可以给PI赋值为10,不会弹出任何错误。所以,用全部大写的变量名表示常量只是一个习惯上的用法。
常量通常放置在代码的最上部,并作为全局使用。