变量
JavaScript 中使用let
、const
、var
进行明确的变量声明,Python 则追求简洁性,直接赋值即可创建变量。两者都支持动态类型,但在类型安全和命名规范上有不同的设计哲学。
声明
在 JavaScript 中,我们已经习惯了明确的变量声明语法。现代 JavaScript 通过let
、const
和var
来声明变量,每个关键字都有特定的作用域和行为:
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 变量管理体现了"简洁胜过复杂"的设计哲学:
- 简洁的声明方式:直接赋值即可创建变量,无需声明关键字
- 动态类型特性:变量可以随时改变类型,提供编程灵活性
- 命名规范统一:使用 snake_case 蛇形式命名,提高代码可读性
- 常量约定:使用全大写表示常量,虽非语言强制但社区广泛遵循
- 多重赋值优雅:支持基础解包、变量交换等简洁语法特性
- 内存管理透明:自动垃圾回收,提供 id() 函数查看对象内存地址
- 可变性区分:明确区分可变对象(list、dict)和不可变对象(str、tuple、int)
掌握 Python 的变量特性,特别是可变性概念,对避免程序中的潜在 bug 非常重要。这些基础概念为后续学习 Python 的高级特性打下了坚实基础。
练习
完成以下变量定义与操作任务,练习本章所学的变量知识点: