Menu

Python 变量:如何声明、赋值和命名

Python 中的变量是怎么工作的:赋值、命名规则、重新赋值,以及让你少踩坑的思维模型。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

变量就是一个名字

Python 中的变量,就是你贴在某个值上的名字。写下名字、一个等号,再写值:

三个变量,三个值,三种类型。Python 毫无怨言地同时存着它们,而你完全不用告诉它这些值是什么类型。值写在 = 后面,名字写在 = 前面。

变量一旦存在,凡是能用这个值的地方,都可以用这个变量:

有了这些名字,倒数第二行代码不用解释也能看懂。这正是好变量名的真正价值:代码读起来就像一段说明。

赋值不是数学

从数学课过来的人常会在这里被绊住:Python 中的 = 不是“等于”,而是“赋值”。它的意思是“取 = 后面的值,把它贴到前面的名字上”。Python 先求出值,再进行赋值。

所以下面的代码完全合法:

count = count + 1 这一行并不是在声称 count 等于 count 加一(这在数学上不可能)。它的意思是:先计算 count + 1,再把结果赋回给 count。Python 先求表达式的值,也就是 0 + 1,得到 1,然后才更新变量。

count = count + 1 你会写得非常频繁,所以 Python 提供了简写:count += 1 效果相同。

重新赋值改变的是标签,不是值

变量随时可以指向另一个值。旧值不会被修改,只是变量开始指向别的东西了:

注意最后几行。mood 前两次存的是字符串,然后突然存了一个整数,Python 也没有抱怨。这就是动态类型:变量没有固定的类型,只有值才有类型。这种灵活性在写原型时很有帮助,但如果变量在函数内部悄悄改变了含义,你又没察觉,就会很头疼。稳妥的习惯是:选一个与值所代表的含义相符的名字,然后让这个变量在整个生命周期内只代表这一样东西。

变量名的规则

Python 接受满足以下条件的名字:

  • 以字母或下划线(_)开头。
  • 只包含字母、数字和下划线。
  • 不是保留关键字(if、for、class、return 等几十个)。

所以这些是合法的:

而这些不合法:

  • 2nd_user:不能以数字开头。
  • user-name:不允许用连字符(Python 会把它当成减法)。
  • class:保留关键字。
  • user name:名字里不能有空格。

你已经知道,名字区分大小写:total、Total 和 TOTAL 是三个不同的变量。Python 不会帮你发现这种拼写错误。

命名约定

除了硬性规则,Python 社区还有一些约定。解释器不会强制执行,但整个生态都在遵守:

  • lower_snake_case 用于普通变量和函数:retry_count、fetch_profile。
  • UPPER_SNAKE_CASE 用于常量:MAX_RETRIES = 5。
  • PascalCase 用于类名(后面会讲到类)。
  • 开头的下划线(_something)暗示这个名字是私有的。并不强制,只是约定。
  • 结尾的下划线(class_)让你能用一个本来会和关键字冲突的名字。

坚持这些约定,你的代码看起来就会和其他人写的 Python 一样。

名字应该描述含义

变量名敲起来不费事,读起来却很费劲。多花几个字符,选一个真正能描述值的含义的名字,能让以后的读者(通常就是以后的你)省下很多琢磨的工夫。

对比一下:

代码相同,结果相同,但只有第二个版本告诉了你发生了什么。短名字(i、n、x)在很小的作用域里没问题,比如循环计数器,但在其他地方,请把名字写完整。

多重赋值(少用)

Python 允许在一行里把同一个值赋给多个变量:

也可以一次解包多个值:

只要能让代码更清晰(比如解包函数的返回值),两种写法都可以用。第一种链式的 = = = 写法值得留个心眼:三个变量最终都指向同一个对象,这对列表这样的可变类型有影响(后面会详细讲)。

要点回顾

  • name = value 创建一个变量。
  • 变量没有类型,值才有类型。
  • 名字要遵守几条硬性规则和很多软性约定,两者都值得尊重。
  • 有描述性的名字是成本最低的文档。

下一篇:Python 实际支持哪些类型的值,包括整数、浮点数、字符串、布尔值,以及为什么分清它们很有帮助。

常见问题

Python 中如何创建变量?

起一个名字,在后面写 =,再在右边写上值。age = 30 创建了一个名为 age、值为 30 的变量。Python 会自动判断类型,你不需要声明。

Python 变量名有哪些规则?

名字可以包含字母、数字和下划线,但不能以数字开头,也不能是 if、class 这样的 Python 关键字。名字区分大小写:total、Total 和 TOTAL 是三个不同的变量。社区惯例是用 lower_snake_case。

Python 变量可以改变类型吗?

可以。Python 是动态类型语言,一个变量这一刻存着数字,下一刻就可以存字符串。这种灵活性很方便,但也可能让你措手不及:如果一个变量的含义在函数中途变了,通常说明该换个新名字了。

Coddy 编程语言插图

和 Coddy 一起学编程

开始