前言
对于很多已经熟悉 JavaScript / Node.js 的开发者来说,学习 Python 往往不是"从零开始",而是一次语言迁移。你已经掌握了编程的核心能力:如何拆解问题、如何设计数据结构、如何写函数和模块、如何处理异步逻辑、如何组织项目结构。所以学习 Python,真正需要适应的,其实只有两件事:
第一,语法表达方式不同。
第二,Python 社区有自己的一套开发习惯。
这篇文章是站在 JavaScript 开发者的视角,帮助你快速理解 Python 到底该怎么学、怎么写、怎么用。
一、先理解本质
很多人第一次看到 Python,会觉得它和 JavaScript 差别巨大,比如:
js
// JavaScript
for (let i = 0; i < 5; i++) {
console.log(i)
}
py
# Python
for i in range(5):
print(i)
看起来像两种语言,但本质上它们表达的是同一件事:创建变量 i,循环执行 5 次并输出结果。区别只是:Python 不写花括号、用缩进表示代码块、更强调可读性。如果用一句话总结:JavaScript 更灵活而 Python 更克制。
二、变量与数据类型:概念相同,命名不同
js
// JavaScript 写法
let name = "Tom"
let age = 18
let price = 9.9
let isAdmin = true
let tags = ["js", "python"]
let user = { name: "Tom", age: 18 }
py
# Python 写法
name = "Tom"
age = 18
price = 9.9
is_admin = True
tags = ["js", "python"]
user = {"name": "Tom", "age": 18}
| JavaScript | Python |
|---|---|
| string | str |
| number | int / float |
| boolean | bool |
| array | list |
| object | dict |
| null | None |
你需要适应的地方
1. 布尔值大小写不同
py
True False None
true false null
2. 命名风格不同
py
# JavaScript 常用:
userName
getUserInfo
# Python 主流写法:
user_name
get_user_info
这叫 snake_case(蛇形命名) ,是 Python 社区默认规范。
三、条件判断:去掉括号和花括号
js
# JavaScript
if (age >= 18) {
console.log("成年")
} else if (age >= 12) {
console.log("青少年")
} else {
console.log("儿童")
}
py
# Python
if age >= 18:
print("成年")
elif age >= 12:
print("青少年")
else:
print("儿童")
最大变化有三个:1. 不需要括号、2. 使用冒号开始代码块、3. 使用缩进表示层级。这也是 Python 最核心的语法特征之一。
四、循环:Python 更像自然语言
自然计数循环
js
// JavaScript
for (let i = 0; i < 5; i++) {
console.log(i)
}
py
# Python
for i in range(5):
print(i)
遍历数组
js
// JavaScript
for (const item of arr) {
console.log(item)
}
py
# Python
for item in arr:
print(item)
while 循环
js
// JavaScript
let i = 0
while (i < 5) {
i++
}
py
# Python
i = 0
while i < 5:
i += 1
注意:Python 没有 ++
py
# 错误写法:
i++
# 正确写法:
i += 1
五、函数:写法更干净
js
// JavaScript
function add(a, b) {
return a + b
}
// 或者
const add = (a, b) => a + b
py
# Python
def add(a, b):
return a + b
# 或者
add = lambda a, b: a + b
Python 也有简写函数(lambda),但实际开发里,大多数场景仍然推荐正常使用 def。因为更清晰,也更符合 Python 风格。
六、字符串处理
js
// JavaScript
const name = "Tom"
console.log(`Hello ${name}`)
py
# Python
name = "Tom"
print(f"Hello {name}")
Python 的叫:f-string,非常常用,也是 Python 字符串格式化的首选方式。
七、数组 map / filter 在 Python 怎么写
js
// JavaScript map
arr.map(x => x * 2)
// JavaScript filter
arr.filter(x => x > 2)
py
# Python 推荐写法
arr = [1, 2, 3]
result = [x * 2 for x in arr]
# 筛选
result = [x for x in arr if x > 2]
为什么 Python 喜欢这样写?因为这叫:列表推导式(List Comprehension),它兼顾:简洁、可读性、性能,在 Python 中非常常见。
八、对象在 Python 里叫 dict
js
// JavaScript
const user = {
name: "Tom",
age: 18
}
// 读取
user.name
py
# Python
user = {
"name": "Tom",
"age": 18
}
# 读取:
user["name"]
# 修改:
user["age"] = 20
注意区别,JavaScript 对象很多时候既是数据结构,也是实例对象。
Python 更明确区分:字典(dict)是键值数据结构,类实例(class object)是对象。
九、类与 this:Python 用 self
js
// JavaScript
class User {
constructor(name) {
this.name = name
}
say() {
console.log(this.name)
}
}
py
# Python
class User:
def __init__(self, name):
self.name = name
def say(self):
print(self.name)
u = User("Tom")
u.say()
理解 self
你可以把它理解成:Python 把 JavaScript 隐式的 this,变成了显式参数 self。这样做的好处是更直观,也更明确。
十、模块系统:import / export 与 Python 的区别
JavaScript 模块(ES Module)
js
// 导出
export const name = "Tom"
export function add(a, b) {
return a + b
}
// 导入
import { name, add } from "./utils.js"
Python 模块系统
Python 没有 export 关键字,一个 .py 文件天然就是一个模块。
py
# 比如你有一个 utils.py 文件,内容:
name = "Tom"
def add(a, b):
return a + b
# 导入模块
import utils
print(utils.name)
print(utils.add(1, 2))
# 解构导入(类似 JS)
from utils import name, add
print(name)
print(add(1, 2))
起别名
py
import utils as u
from utils import add as plus
对比总结
| JavaScript | Python |
|---|---|
| export | 默认公开 |
| import xxx from | import xxx |
| import { a } from | from xxx import a |
| import * | from xxx import *(不推荐) |
Python 为什么没有 export?
因为 Python 默认认为模块中的变量和函数都可以被导入。如果你不想被导入,通常约定写成_internal_var的形式,下划线表示"内部使用"。
十一、文件操作
js
// JavaScript
const fs = require("fs")
const text = fs.readFileSync("a.txt", "utf8")
py
# Python
with open("a.txt", "r", encoding="utf-8") as f:
text = f.read()
print(text)
with open()会自动关闭文件资源。这是 Python 非常经典的写法。
十二、异常处理
js
// JavaScript
try {
run()
} catch (e) {
console.log(e)
}
py
# Python
try:
run()
except Exception as e:
print(e)
# 多种异常捕获
try:
pass
except ValueError:
pass
except TypeError:
pass
十三、包管理:npm 对应 pip
base
# JavaScript
npm install axios
# Python
pip install requests
项目依赖文件
JavaScript:package.json
Python 常见:requirements.txt、pyproject.toml
十四、如果你是 Node.js 开发者,Python 后端怎么选?
| Node.js | Python |
|---|---|
| Express | Flask |
| NestJS | FastAPI |
| Fullstack Framework | Django |
如果你追求现代开发体验,建议优先学:FastAPI,因为它对 JS 开发者非常友好。
十五、总结
如果你会 JavaScript,学习 Python 并不是重新学编程。你只是在学习另一种更简洁、更稳定、更适合工程和工具开发的表达方式。JavaScript 像一个灵活的年轻人,Python 像一个经验丰富的老工程师,它们并不冲突。