Python 变量是指定内存位置用来在 Python 程序中存储值。这意味着当你创建一个变量时,你就在内存中预留了一些空间。
根据变量的数据类型,Python 解释器会分配内存并且决定在预留的内存中可以存储什么。因此,通过给 Python 变量分配不同的数据类型,你可以存储整数、小数或字符等值。
内存地址
不同数据类型的对象存储在计算机的内存中。计算机的内存地址由数字表示,内部则以二进制形式呈现。数据同样以二进制形式存储,因为计算机的工作原理基于二进制表示。在下面的图示中,字符串 "May" 和数字 "18" 显示为存储在内存位置中的情况。
如果你熟悉汇编语言,你会把这些数据项和内存地址转换,并给出一条机器语言指令。然而,并不是每个人都能做到这一点。Python 解释器这样的语言翻译者执行这种类型的转换。它会在随机选择的内存位置存储对象。Python 内置的 id()
函数返回对象存储的位置地址。
>>> "May"
'May'
>>> id("May")
2167264641264
>>> 18
18
>>> id(18)
140714055169352
一旦数据存储在内存中,就需要反复访问来进行某些处理。显然,通过 ID 获取数据是繁琐的。高级语言如 Python 允许给内存位置一个合适的别名或标签。
在上面的例子中,让我们把 "May" 所在位置标记为 month
,而存储 "18" 的位置标记为 age
。Python 使用赋值操作符 (=
) 来绑定一个对象与标签。
>>> month = "May"
>>> age = 18
数据对象("May")及其名称(month
)具有相同的 id()
。同样,18
和 age
的 id()
也相同。
>>> id(month)
2167264641264
>>> id(age)
140714055169352
这个标签是一个标识符。通常称为变量。Python 变量是一个符号名称,它是对一个对象的引用或指针。
创建 Python 变量
Python 变量不需要显式声明来预留内存空间或者说创建一个变量。当你给一个值赋值时,Python 变量会被自动创建。等号 (=
) 用于给变量赋值。
等号左侧的操作数是变量的名称,等号右侧的操作数是要存储在变量中的值。例如:
创建 Python 变量的示例
此示例创建了不同类型的变量(一个整型、一个浮点型和一个字符串)。
counter = 100
miles = 1000.0
name = "Zara Ali"
打印 Python 变量
一旦创建了一个 Python 变量并赋予其一个值后,就可以使用 print()
函数来打印它。以下是上一个示例的扩展,展示了如何打印不同的变量:
counter = 100
miles = 1000.0
name = "Zara Ali"
print(counter)
print(miles)
print(name)
当运行上述 Python 程序时,会产生以下结果:
100
1000.0
Zara Ali
删除 Python 变量
你可以使用 del
语句删除对一个数字对象的引用。del
语句的语法如下:
del var1[,var2[,var3[....,varN]]]
你可以使用 del
语句删除单个对象或多个对象。例如:
del var
del var_a, var_b
示例
以下示例展示了如何删除一个变量,如果我们试图使用已删除的变量,Python 解释器将会抛出错误:
counter = 100
print(counter)
del counter
print(counter)
这会产生以下结果:
100
Traceback (most recent call last):
File "main.py", line 7, in <module>
print(counter)
NameError: name 'counter' is not defined
获取变量类型
你可以使用 Python 内置函数 type()
来获取 Python 变量的数据类型。
x = "Zara"
y = 10
z = 10.10
print(type(x))
print(type(y))
print(type(z))
这会产生以下结果:
<class 'str'>
<class 'int'>
<class 'float'>
强制类型转换 Python 变量
你可以通过强制类型转换来指定变量的数据类型:
x = str(10)
y = int(10)
z = float(10)
print("x =", x)
print("y =", y)
print("z =", z)
这会产生以下结果:
x = 10
y = 10
z = 10.0
Python 变量的大小写敏感性
Python 变量是大小写敏感的,这意味着 Age
和 age
是两个不同的变量:
age = 20
Age = 30
print("age =", age)
print("Age =", Age)
这会产生以下结果:
age = 20
Age = 30
Python 变量 - 多重赋值
Python 允许在一个语句中初始化多个变量。在下面的情况下,三个变量具有相同的值。
a = 10
b = 10
c = 10
而不是分别赋值,你可以用一个赋值语句来做:
a = b = c = 10
print(a, b, c)
在下面的情况下,我们有三个变量,它们有不同的值。
a = 10
b = 20
c = 30
这些单独的赋值语句可以组合在一起。你需要在等号左侧给出逗号分隔的变量名,在右侧给出逗号分隔的值。
a, b, c = 10, 20, 30
print(a, b, c)
这会产生以下结果:
10 20 30
让我们试几个脚本模式下的例子:
a = b = c = 100
print(a)
print(b)
print(c)
这会产生以下结果:
100
100
100
这里,创建了一个值为 1 的整型对象,并且所有三个变量都被分配到了同一个内存位置。你也可以将多个对象分配给多个变量。例如:
a, b, c = 1, 2, "Zara Ali"
print(a)
print(b)
print(c)
这会产生以下结果:
1
2
Zara Ali
在这里,创建了两个值分别为 1 和 2 的整型对象,并分别赋值给了变量 a
和 b
,同时创建了一个值为 "Zara Ali" 的字符串对象,并赋值给了变量 c
。
Python 变量 - 命名规范
每个 Python 变量都应该有一个唯一的名字,像 a
, b
, c
。变量名可以是有意义的,像 color
, age
, name
等。命名 Python 变量时有一些规则需要遵守:
-
-
变量名不能以数字或任何特殊字符(如
$
, (
, *
, %
等)开头。
-
变量名只能包含字母数字字符和下划线(A-z, 0-9, 和
_
)。
-
Python 变量名是大小写敏感的,这意味着
Name
和 NAME
在 Python 中是两个不同的变量。
-
如果变量名包含多个单词,我们应该使用以下命名模式:
-
驼峰命名法 - 首字母小写,但随后每个单词的首字母大写。例如:
kmPerHour
, pricePerLitre
-
帕斯卡命名法 - 每个单词的首字母大写。例如:
KmPerHour
, PricePerLitre
-
蛇形命名法 - 使用单个下划线 (
_
) 字符来分隔单词。例如:km_per_hour
, price_per_litre
示例
以下是有效的 Python 变量名:
counter = 100
_count = 100
name1 = "Zara"
name2 = "Nuha"
Age = 20
zara_salary = 100000
print(counter)
print(_count)
print(name1)
print(name2)
print(Age)
print(zara_salary)
这会产生以下结果:
100
100
Zara
Nuha
20
100000
示例
以下是无效的 Python 变量名:
1counter = 100
$_count = 100
zara-salary = 100000
print(1counter)
print($_count)
print(zara-salary)
这会产生以下结果:
File "main.py", line 3
1counter = 100
^
SyntaxError: invalid syntax
一旦你使用一个变量来标识一个数据对象,它可以被重复使用而无需其 id()
值。这里,我们有两个变量 height
和 width
表示矩形的高度和宽度。我们可以用这两个变量计算面积和周长。
width = 10
height = 20
area = width * height
perimeter = 2 * (width + height)
print(area)
print(perimeter)
使用变量在编写脚本或程序时特别有利。以下脚本也使用了上述变量:
width = 10
height = 20
area = width * height
perimeter = 2 * (width + height)
print("Area =", area)
print("Perimeter =", perimeter)
保存上述脚本为 .py
文件并在命令行中执行。结果如下:
Area = 200
Perimeter = 60
Python 局部变量
Python 局部变量是在函数内部定义的。我们不能在函数外部访问变量。
一个 Python 函数是一段可重用的代码,你将在 Python 函数教程中了解更多关于函数的信息。
示例
以下是一个展示局部变量使用的示例:
def sum(x, y):
sum = x + y
return sum
print(sum(5, 10))
这会产生以下结果:
15
Python 全局变量
任何在函数外部创建的变量都可以在任何函数内访问,因此它们具有全局作用域。
示例
以下是一个全局变量的示例:
x = 5
y = 10
def sum():
sum = x + y
return sum
print(sum())
这会产生以下结果:
15
Python 中的常量
Python 没有任何正式定义的常量。但是,你可以通过使用全大写名称加上下划线的方式指示一个变量作为常量来对待。例如,名称 PI_VALUE
表明你不希望该变量被重新定义或以任何方式更改。
这种全大写的命名约定有时被称为“尖叫声蛇形命名”——其中全大写表示“尖叫”,而下划线表示“蛇”。
Python 变量与 C/C++ 变量的对比
变量的概念在 Python 中与 C/C++ 中的工作方式有所不同。在 C/C++ 中,变量是一个命名的内存位置。如果 a=10
且 b=10
,那么这两个是不同的内存位置。假设它们的内存地址分别是 100 和 200。
如果给 a
分配一个不同的值——比如说 50,那么 100 地址处的 10 就会被覆盖。
Python 变量指向的是对象而不是内存位置。一个对象只在内存中存储一次。多个变量实际上是同一对象的多个标签。
a=50
这条语句会在其他位置创建一个新的整数对象 50,而不会影响由 b
指向的对象 10。
进一步地,如果你给 b
分配另一个值,那么对象 10 将不再被引用。
Python 的垃圾回收机制会释放任何未被引用对象所占用的内存。
Python 的身份运算符 is
当两个操作数具有相同的 id()
值时返回 True
。
>>> a = b = 10
>>> a is b
True
>>> id(a), id(b)
(140731955278920, 140731955278920)
请注意,这里的 id()
返回值仅作示例用途,并且实际的内存地址可能因运行环境而异。