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