变量与常量

变量与常量

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

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

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

 1.Python中的变量不需要生命类型

这是根据Python的动态语言特性而来。变量可以直接使用,而不需要提前生命类型。例如:name,age,sex三个变量,在使用之前没有不需要声明 str name,int age,str sex,而这声明变量是C和Java中必须的。而Python使用变量:

name = "xiaohei"
age = 20
sex = "man"

2.用 “=”号给变量赋值

age = 100

这里的等号要理解并读作“赋值”,而不是“等于”,“赋值”是对变量的操作,而“等于”是对两个变量进行比较的。上面的 name、age、sex变量就是通过"="号赋值的。

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

新的变量通过赋值的动作,创建并开辟内存空间,保存值。如果没有赋值而直接使用就会抛出异常,例如:

age  # 没有赋值
print(age)  # 报异常 NameError: name 'age' is not defined

# 修改后

age = 1  # age赋值
print(age)  # 打印正常

4.Python中,一切皆对象,变量引用的是对象或者说是对象在内存中的地址

 后边详细说

5.Python中,变量本身没有数据类型的概念

通常说的“变量类型”是变量所引用的对象的类型,或者说是变量的值得类型。

name = "xiaohei"
name = 333
name = [1, 2, 3, 4]
name = {"k1": "v1"}
print(name)

例子中,变量name在创建的时候,赋值为xiaohei字符串类型,然后又被改为整数类型,再变成一个列表类型,最后是字典类型。变量name在动态的改变,他的值分别是不同的数据类型,这就是动态语言的特点。

6.“=”号这个赋值运算符是从右往左计算顺序

x = 1
y = 2
z = x + y  # 先计算x+y值在赋值个z
print(z)

 7.Python可以同时为多个变量赋值

a = b = c = 1
print(a)  # 1
print(b)  # 1
print(c)  # 1

8.同时为多个变量分别赋值,用逗号分隔,逐一对应

a, b, c = 1, 2, 3  # 一一对应
print(a, b, c)

9.不要把赋值语句的等号等同于数学的等号

a = 1
a = a + 2
print(a)

从数学的角度理解a = a+2是不成立的,但在程序中,赋值语句先计算a+2得到结果后再赋值给a,之前a的值是1,那么重新赋值后a得值是3。

如果理解变量计算机内存中的表示也很重要。如:

name = "xiaohei"

1.在内存中创建一个"xiaohei"的字符串对象。

2.在内存中创建一个名为name的变量,并将它指向"xiaohei"。

也可以把一个变量name赋值给a,这个操作实际上是将变量a指向name所指向的数据,如下:

name = "xiaohei"
a = name
name = "xiaohei1"
print(name)
print(a)

最后变量a的内容到底是"xiaohei"还是"xiaohei1"?从数学的角度上理解,就会错误的得出a和name是"xiaohei1",但实际的a的值还是"xiaohei"。

ps:Python中的一切都是对象,变量是对象的引用。

1.执行name = "xiaohei",解释器创建字符串"xiaohei",对象和变量name,并将name指向"xiaohei"对象。

2.执行a = name,解释器创建变量a,并将其指向变量name指向的字符串"xiaohei"对象。

3.执行name = "xiaohei1",解释器创建字符串"xiaohei1"对象,并把name指向的对象改变为"xiaohei1",与a变量无关

常量

常量就是不变的变量,比如身份证号码、数学中圆周率都是常量,在Python中通常用全部大写的变量表示常量

但事实上从Python的语法角度上看,身份证号码、圆周率依然是一个变量,因为Python没有任何机制保障常量不会被改变,改变其值,也不会报错。所以用全部大写的变量名表示常量只是程序员的一种习惯的用法。

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

原文地址:https://www.cnblogs.com/xiaohei001/p/10103242.html