什么是变量

用标识符命名的存储单元的地址称为变量,变量是用来存储数据的,通过标识符可以获取变量的值,也可以对变量进行赋值。对变量赋值的意思是将值保存到变量里面,保存完成后,变量所指向的存储单元存储了被赋的值,在Pyhton语言中赋值操作符为=、+=、-=、*=、/=、%=、**=、//=。

关于标识符,请参照“python教程003-编码-缩进-标识符-保留字-注释-表达式-语句”的内容-标识符

定义变量

在Python中,使用变量的时候,不需要提前声明,只需要给这个变量赋值即可定义一个变量。如果只写一个变量,而没有赋值,那么Python认为这个变量没有定义。

变量的赋值语法如下:
identifier = value

其中identifier是标识符,也就是变量的名称。value为变量的值。
例如:

1
2
3
4
5
6
7
age = 18       # 整型变量age
name = "angle" # 字符串变量age
weight = 60.5  # 浮点数变量weight

print(age)     # 打印变量age的值
print(name)    # 打印变量name的值
print(weight)  # 打印变量weight的值

执行以上程序会输出如下结果:

1
2
3
18
angle
60.5

变量类型

变量的类型是由变量的值决定的。变量的值是什么类型变量就是什么类型。

例如,将整数1赋值给变量a,那么变量a的类型就是整数。内置的type()函数可以用来查询变量的类型。

1
2
3
4
5
6
7
age = 18              # 将整数18赋值给变量age
name = "angle"        # 将字符串angle赋值给变量name
weight = 60.5         # 将浮点数60.5赋值给变量weight

print(type(age))      # 打印变量age的类型
print(type(name))     # 打印变量name的类型
print(type(weight))   # 打印变量weight的类型

执行以上程序会输出如下结果:

1
2
3
<class 'int'>
<class 'str'>
<class 'float'>

改变变量类型

变量的类型是由其值决定的。变量的值是可以改变为其他类型的值,因此,变量的类型也是可以改变的。

像这种定义后的变量,可以随意改变类型的也被称之为动态语言。声明之后不可以改变类型的语言为静态语法,例如java,c#等。

例如:

1
2
3
4
5
6
7
8
weight = 60.5         # 变量weight的类型是float
print(type(weight))   # 打印变量weight的类型

weight = 60           # 改变变量weight的类型,类型是int
print(type(weight))   # 打印变量weight的类型

weight = "60Kg"       # 改变变量weight的类型,类型是str
print(type(weight))   # 打印变量weight的类型

执行以上程序会输出如下结果:

1
2
3
<class 'float'>
<class 'int'>
<class 'str'>

多个变量赋值

Python允许你同时为多个变量赋值(同一个值)。

例如:
a = b = c = 10
创建一个三个整数变量a,b,c,值为10,从后向前赋值,三个变量被赋予相同的数值10。

也可以为多个变量指定不同的值。

例如:
a, b, c = 10, 20, "test"
创建两个整数变量a和b,一个字符串变量c。10和20的分配给变量a和b,字符串”test”分配给变量c。

还有另外一种写法,就是加上括号和逗号,使其构成元组,通过元组解包来给变量赋值。关于元组及解包的相关知识以后讲解。
(a, b, c) = (10, 20, "test")
a, b, c = (10, 20, "test")
(a, b, c) = 10, 20, "test"

以上三种方式和a, b, c = 10, 20, "test"是同样的效果。

由于这个特性,交换两个变量的话比较容易实现。

例如:

1
2
3
4
5
6
a = 10
b = 20
a,b = b,a

print("a = ",a)
print("b = ",b)

执行以上程序会输出如下结果:

1
2
a =  20
b =  10

global全局变量

由global关键字声明的变量是全局变量,适用于整个当前代码块。

例如:

1
2
3
4
5
6
7
8
9
result=2
def add(value1,value2):
    # 将result变量声明为全局变量
    # 也就是说此处的result和add函数外的result是同一个。
    global result
    result = value1 + value2

add(3,5)
print(result) # 输出 8

如果没有global语句呢?

1
2
3
4
5
6
result=2
def add(value1,value2):
    result = value1 + value2

add(3,5)
print(result) # 输出 2

为啥结果是2呢?
因为add函数内的result变量是局部变量,同函数外的result没有任何关系。所以print(result),输出的是函数外部变量result的值2。

注意: 在实际的编程时,你应该试着避开global关键字,因为它引入了多余的变量到全局作用域了,容易导致不易察觉的错误。例如下面的例子,将函数内的局部变量addresult升级为全局变量。

1
2
3
4
5
6
7
8
9
result=2
def add(value1,value2):
    # 将局部变量addresult声明为全局变量。
    global addresult
    addresult = value1 + value2

add(3,5)
print(result)    # 输出全局变量result的值 2
print(addresult) # 输出全局变量addresult的值 8

可以使用global语句指定多个全局变量。
例如:global x, y, z

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
x = 1
y = 2
z = 3
def add(value1,value2):
    # 将 x, y, z变量声明为全局变量,
    # 也就是说此处的x, y, z三个变量和add函数外的x, y, z是一样的。
    global x, y, z
    x = value1 + value2
    y = value1 - value2
    z = value1 * value2

add(3,5)
print(x) # 输出 8。由原来声明时的1变为8
print(y) # 输出 -2。由原来声明时的2变为-2
print(z) # 输出 15。由原来声明时的3变为15

转载请注明本网址。