【基础】变量与常量

变量:在程序运行过程中,值会发生变化的量

常量:在程序运行过程中,值不会发生变化的量

无论是变量还是常量,在创建时都会在内存中开辟一块空间,用于保存它的值。

1. 创建变量不需要事先声明类型

在Python中,变量和常量不需要事先声明类型。

例如下面的 agename 两个变量,在使用前没有进行任何的诸如 int agestring name 的类型声明,而这在一些静态语言如 Java 和 C++ 中是不能缺少的。

>>> age = 24
>>> name = "Will Wang"

2. 变量的赋值、比较

在 Python 中,用 = 号来给变量赋值,比如下面这个表达式,age 这个变量的值就是 24

>>> age = 24

与之相似的两个等号 == ,它表示的是比较两个值是否相等,如果相等返回 True,如果不相等则返回 False

>>> age = 24
>>> age == 24
True
>>> age == 25
False

3. 先创建变量再使用变量

每个变量在使用前都必须赋值,变量赋值以后才会被创建。

新的变量通过赋值的动作,创建并开辟内存空间,保存值。

如果没有赋值而直接使用,会抛出变量未定义的异常。例如:

>>> age
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
>>>
>>> age = 24
>>> age
24

4. 变量赋值的四种方式

赋值的4种方式

第1种:单个直接赋值

>>> age = 24
>>> age
24

第2种:多个批量赋值

>>> a = b = c = 1
>>> a
1
>>> b
1
>>> c
1

第3种:先计算再赋值

# 先计算 23 + 1,再把结果赋值给age
>>> age = 23 + 1
>>> age
24

第4种:分别赋值(注意逗号,与第2种赋值方式区分开来)

>>> a, b, c = 1, 2, 3
>>> a
1
>>> b
2
>>> c
3

5. 理解变量赋值的背后

理解变量在计算机内存中的表示:

当我们写:a = "TYUT" 时,Python解释器干了两件事情:

  1. 在内存中创建了一个'TYUT'字符串对象

  2. 在内存中创建了一个名为 a 的变量,并把它指向 'TYUT'

而当你把一个变量 a 赋值给另一个变量 b,这个操作实际上是将变量 b 指向变量 a 所指向的数据,例如:

>>> a = "TYUT"
>>> a
'TYUT'
>>> b = a
>>> b
'TYUT'

>>> id(a)
2527101022576
>>> id(b)
2527101022576

通过 id() 可以查看变量值的内存地址,打印出来的 a 和 b的内存地址是一样的,因此二者其实是一个数据。

但如果继续对 a 进行赋值其他值, 会发现 a 的内存地址变了,而 b 的并没有变

>>> a = "THU"
>>> a
'THU'

>>> id(a)
2527101024368
>>> id(b)
2527101022576

注意:Python中的一切都是对象,变量是对象的引用!

  • 执行a = "TYUT",解释器创建 TYUT 字符串对象和变量 a,并把 a 指向 TYUT 字符串对象;

  • 执行b = a,解释器创建变量b,并且将其指向变量a指向的TYUT字符串对象;

  • 执行a = "THU",解释器创建THU字符串对象,并把 a 改为指向THU字符串对象,与b无关。

6. 什么是常量?

常量就是不变的变量,比如常用的数学常数圆周率就是一个常量。

在Python中,通常用全部大写的变量名表示常量

>>> PI = 3.14159265359
>>> PI
3.14159265359

事实上,从Python语法角度看,PI仍然是一个变量,因为Python根本没有任何机制保证PI不会被改变。

你完全可以给PI赋值为1或者2等等,也不会弹出任何错误。

所以,用全部大写的变量名表示常量,只是一个习惯上的用法,用以区分与变量的不同。

常量通常放置在代码的最上部,并作为全局使用。