模块 10: 常见陷阱
从 JavaScript 开发者视角,解析 Python 中常见的概念陷阱和易错点。
1. 引言
当你从一种语言切换到另一种时,最棘手的往往不是新语法,而是一些看似相同但行为却截然不同的“陷阱”。这些细微的差异可能会导致难以察觉的 bug 和困惑。
本模块专门为你——从 JavaScript 过渡到 Python 的开发者——梳理了一些最常见的概念陷阱。
💡 学习策略:不要死记硬背。理解每个陷阱背后的“为什么”,并将其与 JavaScript 的行为进行对比,这样你才能在实际编码中自然而然地避开它们。
2. 真值 (Truthy) 与假值 (Falsy)
在 Python 中,空的集合类型(如列表、字典、元组)被认为是“假值”(Falsy)。这与 JavaScript 的行为有显著不同,在 JS 中,空数组 []
和空对象 {}
都是“真值”(Truthy)。
3. this
vs self
在 JavaScript 的类方法中,this
是一个关键字,其指向在函数调用时确定。而在 Python 的实例方法中,第一个参数(按照惯例命名为 self
)显式地代表实例本身,它不是一个关键字。
4. 变量作用域
JavaScript (ES6+) 拥有块级作用域(由 {}
界定),而 Python 的作用域是基于函数(或类、模块)的。在 for
循环等代码块中定义的变量,在 Python 中会“泄漏”到外部作用域。
5. 可变默认参数
这是一个 Python 中非常经典且臭名昭著的“陷阱”。如果函数的默认参数是一个可变对象(如列表或字典),那么这个对象会在所有调用之间共享。这与 JavaScript 的行为完全不同。
6. null
/undefined
vs None
JavaScript 中有两个表示“无”的值:null
(表示“有意设置的空值”)和 undefined
(表示“未定义”)。在 Python 中,只有一个对应的概念:None
。
7. 总结
理解并掌握这些差异,将帮助你更快地写出健壮、无意外的 Python 代码。当你遇到意料之外的行为时,不妨回过头来看看这个列表,检查是否踩中了其中的某个“陷阱”。