Python气象应用编程
上QQ阅读APP看书,第一时间看更新

2.1 变量

在编程语言中可以定义变量。在Python中,我们使用=来定义变量,与其他语言的变量可以存储真实值不一样的是,Python中的变量的名称是与实际数据相关联的“代号”(如指针)。与数学中=的意义有所不同,Python中的=代表着赋值,它用于执行赋值的操作。例如n = 0,意味着将0这个值赋上一个别称n

需要注意的是,通常来说,Python中所有东西都是对象,所谓万物皆对象,数字、字符串、函数等都是对象(2.8节会详细说明对象),而变量赋值就是将变量关联某个对象。可以把对象想象成一个盒子,变量是盒子外面贴的小纸条,如图2-1所示。

同一个变量所指代的对象是可以变化的,就像盒子上的小纸条一样,我们随时可以通过新的赋值操作把写有n的小纸条撕下来,贴到新的对象上。例如,另外赋值n = 1,如图2-2所示。

图2-1 变量名只是某个对象的代号

图2-2 变量的重新赋值只是对代号的“迁移”

在Python中对变量进行赋值并不是将0改成1,而是将贴在0这个值上的小纸条撕下来,贴到1这个值上。尝试理解这一点,这在后续将会帮助你理解为什么Python中的变量会有某些“反直觉”的特征。

除此之外,同一个对象也可以被多个变量所指向。例如,m = n,如图2-3所示。

图2-3 同一个对象可以有多个别称

例如:

n = 1
m = n
print(m is n)
n = 2
print(m)

返回结果为:

True
1

从代码的运行中可以看出,这时m所指代的对象就是n所指代的对象,并且这时如果将写有n的小纸条撕下来贴到其他对象上,也不会影响m所指代的对象。

当一个对象没有被任何变量引用时,也就是对象盒子上没有贴任何纸条时,这个对象将被Python解释器销毁,再也找不回来,如图2-4所示。

图2-4 没有别称的对象会被销毁

你可能会想,0这个数怎么可能会被销毁,重新赋值不就回来了吗?实际上这里被销毁的是前面介绍的0这个对象(装有0数字的这个盒子),而后面重新赋值生成的对象(新盒子)将不再是原来的对象(即使它们都代表0这个数字,但它们仍然不是同一个对象)。

我们可以将已经赋值过的变量和数值混合使用。

例如:

a = 10
print(a + 2)
print(a)

返回结果为:

12
10

上面的代码中出现了a + 2,但是计算出的结果并没有赋给任何变量,所以也就没有改变a的值。

如果想把a + 2的结果赋值给a,那可以这样写:

a = a + 2
print(a)

输出结果为:

12

需要再次强调的是,从数学上来说a = a + 2这个式子并不成立,在Python中=是赋值操作符,上面的代码等价于:

a = 10
temp = a + 2
a = temp
print(a)

输出结果为:

12

变量名只能包括以下字符:

大小写字母(a~z,A~Z);

数字(0~9);

下划线(_)。

变量名不允许以数字开头,字母为全大写的变量表示常量,例如PI = 3.14(实际上Python中并不存在保证PI不被修改的机制,所以通常约定字母为全大写的变量为常量,以告知使用者不要尝试去修改它)。

此外,不能将Python中的关键字作为变量名,它们是Python语法的组成部分,关键字如表2-1所示。(在Python 2中,print是关键词,在Python 3中它是函数。)

表2-1 关键字