变量与常量
变量:在程序运行过程中,值会发生变化的量。
常量:再程序运行过程中,值不会发生变化的量。
无论是变量还是常量,在创建时都会在内存中开辟一块空间,用于保存他的值。
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没有任何机制保障常量不会被改变,改变其值,也不会报错。所以用全部大写的变量名表示常量只是程序员的一种习惯的用法。
常量通常放在代码的最上部,并作为全局变量使用。