Skip to content

变量

6015字,阅读约37分钟

JavaScript 中使用letconstvar进行明确的变量声明,Python 则追求简洁性,直接赋值即可创建变量。两者都支持动态类型,但在类型安全和命名规范上有不同的设计哲学。

声明

在 JavaScript 中,我们已经习惯了明确的变量声明语法。现代 JavaScript 通过letconstvar来声明变量,每个关键字都有特定的作用域和行为:

JavaScript 的这种设计让我们能清楚地表达变量的可变性意图,特别是const关键字能防止意外的重新赋值。在前端开发中,这种明确的声明方式有助于避免变量作用域相关的 bug。

Python 采用了截然不同的哲学:简洁胜过冗余。在 Python 中,你无需任何声明关键字,直接赋值即可创建变量。这种设计让代码更加简洁直观:

Python 中的"常量"约定

虽然 Python 没有const关键字,但社区有明确的约定:使用全大写的变量名来表示常量。这是一种编程约定而非语言强制:

这种约定虽然不如 JavaScript 的const严格,但在实际开发中同样有效。Python 开发者普遍遵循这个约定,代码审查时也会检查这类问题。

动态类型

JavaScript 和 Python 都是动态类型语言,变量可以在运行时改变类型。但两者在类型处理上有细微差异:

Python 的动态类型系统更加直观,type()函数返回的信息更加准确:

Python 的类型检查更加严格,在某些类型转换场景下会抛出错误,而 JavaScript 会进行隐式类型转换:

对比 JavaScript 的隐式转换:

Python 的这种严格性虽然需要更多的显式转换,但能避免很多 JavaScript 中常见的类型相关 bug。

多重赋值

JavaScript 支持解构赋值,这是 ES6 引入的强大特性:

Python 的多重赋值功能类似但语法更加简洁,这个特性甚至比 JavaScript 的解构赋值出现得更早:

这些基础的多重赋值操作是 Python 中最常用的,更高级的解包用法我们将在后续章节中详细学习。

变量的内存管理

作为前端开发者,你可能很少需要考虑 JavaScript 的内存管理,因为现代 JavaScript 引擎有很好的垃圾回收机制:

Python 的内存管理也是自动的,但提供了更多的内省能力。Python 内置的id()函数可以返回对象的唯一标识符,通常表示内存地址,这让我们能够观察对象的引用关系。理解 Python 的对象模型有助于编写更高效的代码:

可变与不可变对象

Python 有一个重要概念:可变(mutable)和不可变(immutable)对象。这影响变量赋值的行为:

这种设计让 Python 在处理数据时更加明确,避免了 JavaScript 中一些隐式的行为。

小结

Python 变量管理体现了"简洁胜过复杂"的设计哲学:

  1. 简洁的声明方式:直接赋值即可创建变量,无需声明关键字
  2. 动态类型特性:变量可以随时改变类型,提供编程灵活性
  3. 命名规范统一:使用 snake_case 蛇形式命名,提高代码可读性
  4. 常量约定:使用全大写表示常量,虽非语言强制但社区广泛遵循
  5. 多重赋值优雅:支持基础解包、变量交换等简洁语法特性
  6. 内存管理透明:自动垃圾回收,提供 id() 函数查看对象内存地址
  7. 可变性区分:明确区分可变对象(list、dict)和不可变对象(str、tuple、int)

掌握 Python 的变量特性,特别是可变性概念,对避免程序中的潜在 bug 非常重要。这些基础概念为后续学习 Python 的高级特性打下了坚实基础。

练习

完成以下变量定义与操作任务,练习本章所学的变量知识点:

点击查看参考答案

基于 MIT 许可发布