Python 教程 | 01-变量

138 阅读7分钟

在本文中,我将向你介绍 Python 中的变量。变量是程序中储存信息的容器,它可以在程序的不同部分之间共享信息。学会使用变量是编写 Python 程序的基本技能,因此我建议您仔细阅读本教程。 在本文中,我将向你介绍 Python 中的变量。变量是程序中储存信息的容器,它可以在程序的不同部分之间共享信息。学会使用变量是编写 Python 程序的基本技能,因此我建议您仔细阅读本教程。

通过阅读本文,你将能够:

  • 了解 Python 中的变量
  • 学会如何定义变量
  • 学会如何使用变量
  • 了解 Python 中的变量命名规则
  • 理解 Python 变量在内存中是如何保存的
  • 了解局部变量和全局变量
  • 了解栈区和堆区
  • 了解常量

Python 变量

在 Python 中,变量是指用于存储值的命名容器。你可以把变量想象成一个盒子,你可以往盒子里放入任意类型的信息,并通过变量的名字来访问盒子里的信息。

举个例子,你可以定义一个变量来储存你的名字,如下所示:

name = "Mike"

在上面的代码中,我们定义了一个变量 name,并将字符串 "Mike" 赋值给它。

定义变量 在 Python 中,我们使用等号(=)来定义变量。例如:

name = "Mike"
age = 18

在上面的代码中,我们定义了两个变量:name 和 age。我们使用等号将字符串 "Mike" 和数字 "18" 分别赋值给了这两个变量。 注意:在 Python 中,你不需要指定变量的类型。Python 会自动推断出变量的类型。例如,在上面的代码中,Python 会把 name 变量推断为字符串类型,把 age 变量推断为数字类型。

使用变量 在 Python 中,我们使用变量名来访问变量中储存的信息。例如:

print(name)  # 输出 "Mike"
print(age)   # 输出 18

在上面的代码中,我们使用了 Python 的 print 函数来输出变量的值。你可以看到,使用变量名就可以访问变量中储存的信息。 你还可以对变量赋新值,例如:

name = "John"  # 把 name 变量的值改为 "John"
age = 20        # 把 age 变量的值改为 20
print(name)     # 输出 "John"
print(age)      # 输出 20

在上面的代码中,我使用等号将新值赋给了 name 和 age 变量。

Python 中的变量命名规则

在 Python 中,有一些规则需要遵守来命名变量。这些规则包括:

  • 变量名只能包含字母、数字和下划线。
  • 变量名不能以数字开头。
  • 变量名不能包含空格。
  • 变量名不能与 Python 的关键字重名。

下面是一些合法的 Python 变量名的例子:

  • x
  • x1
  • name

下面是一些不合法的 Python 变量名的例子:

  • 1x
  • $y
  • z$
  • if

Python 变量在内存中是如何保存的

在 Python 中,变量指向对象的引用,而不是直接保存对象本身。也就是说,当你创建一个变量时,实际上是在内存中分配了一个空间来存储这个变量的内存地址,然后将这个变量名称与这个地址关联起来。

例如,当你执行代码 x = 1 时,Python 会在内存中分配一个空间来存储整数 1,然后在变量 x 中保存这个整数对应的内存地址。这意味着,当你读取变量 x 的值时,Python 会从内存中读取这个地址,然后使用改地址来访问存储在其中的数据。

此外,在 Python 中,所有的对象都是不可变的。当你试图修改某个变量的值时,Python 并没有直接修改原先对象的内容,而是创建了一个新对象,并将新对象的内存地址赋值给变量。例如,将变量 x 的值更改为 2,即 x = 2,Python 会在内存中分配一个新的空间来存储整数 2,然后将变量 x 与这个新的内存地址关联起来。

我们可以通过 Python 内置函数 id() 来验证 “在 Python 中,所有的对象都是不可变的。” id() 函数用于返回对象的内存地址,返回值为长整数。代码如下:

x = 1
print(id(x)) // 140554415511856

x = 2
print(id(x)) // 140554415511888

显然,140554415511856 不等于 140554415511888,因此在 Python 中,所有的对象都是不可变的。

局部变量和全局变量

在 Python 中,局部变量是在函数内部声明的变量,只能在函数内部使用。全局变量是在整个程序中都可以使用的变量,可以在函数内部或外部使用。示例代码如下:

x = 10  # 全局变量

def my_function():
    x = 20  # 局部变量
    print(x)

my_function()  # 输出 20
print(x)  # 输出 10

如果要在函数内部修改全局变量的值,则必须在函数内部使用 global 关键字声明这个变量是全局变量,否则 Python 会认为这是一个局部变量。示例代码如下:

x = 10  # 全局变量

def my_function():
  global x
  x = 20  # 修改全局变量 x 的值
  print(x)

my_function()  # 输出 20
print(x)  # 输出 20

在上面的示例中,我们在函数内部使用了global关键字声明了变量x是一个全局变量。这样,我们就可以在函数内部修改全局变量x的值。需要注意的是:使用global关键字修改全局变量的值会影响整个程序中的全局变量的值,因此应该谨慎使用。

栈区和堆区

栈区用于存储函数调用过程中的局部变量。每个函数调用都会在执行栈中开辟一个新的帧,用于存储函数的参数和局部变量。

堆区用于存储动态分配的内存,例如使用内置函数 list() 创建的列表对象,这些对象是保存在堆区的对象空间中的。

实际上 对于代码

x = 1
print(id(x)) // 140554415511856

x = 2
print(id(x)) // 140554415511888

其执行过程可以概括为:

(1)当你执行x = 1这行代码时,会在内存的堆区中分配一块空间来存储整数值 1。同时,在内存的栈区中开达一个变量 x,并将这个变量指向堆区中刚刚分配的那块内存。这样,当你在程序中使用变量 x 时,实际上是通过栈区中的 x 变量访问堆区中的数值 1。

(2)当你执行x = 2这行代码时,程序会在堆区中再次分配一块空间来存储整数值 2。然后,程序会在栈区中的变量 x 所指向的内存地址改变,使其指向堆区中新分配的那块内存。这样,当你在程序中使用变量 x 时,实际上是通过栈区中的 x 变量访问堆区中的数值 2。

常量

常量是一个指用于存储不可变值的命名容器。Python 中,并不存在专门的常量类型,因此无法在 Python 中定义常量。但是程序员在开发 Python 程序时,通常变量名称全部用大写字母表示,以此来表示常量。例如:

PI = 3.14

应该注意的是,PI 并不是真正的常量,它的值仍然是可以被修改的。