0.2 语法与基础类型
概述
你已经熟练掌握了 JavaScript 的语法:大括号块、let/const、===、模板字符串等。Python 的语法看起来更"干净"——它用缩进代替大括号、几乎不需要分号、没有 let/const。这一章把这些基础语法的差异一次性讲清楚,让你写 Python 时不至于被"没有大括号"卡住。
JS/TS ↔ Python 对照表
核心概念
1. 缩进代替大括号
你已经习惯用 {} 划定作用域。Python 用缩进层级来划分代码块,缩进是有语义的(不是可选的排版习惯)。
if (age > 18) {
console.log("成年");
} else {
console.log("未成年");
}
if age > 18:
print("成年") # 缩进 4 空格,属于 if 块
else:
print("未成年") # 属于 else 块
冒号
:表示"下面是一个新代码块"。同一块内的缩进必须一致(推荐 4 个空格,别混用 Tab)。
类比:
{相当于:,}相当于"缩进退回一层"。
2. 变量声明:没有 let/const
Python 没有 let、const、var,直接赋值即声明:
let count = 0;
const name = "Alice";
count = 0
name = "Alice"
没有真正的"常量",社区约定:全大写变量名表示"请不要改",如
MAX_RETRIES = 5。变量可以随时重新赋值且类型可变(动态类型,和 JS 一样)。
3. 数字:int / float
JS 里所有数字都是 64 位浮点 Number(所以 0.1 + 0.2 !== 0.3)。Python 分两类:
const a = 42; // Number(其实内部是浮点)
const b = 3.14;
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
a = 42 # int,任意精度,永不溢出
b = 3.14 # float,IEEE 754 双精度
print(2 ** 100) # 1267650600228229401496703205376,精确!
Python 的
int是任意精度,2 ** 100不会溢出、不会丢失精度。除法
/总是返回float(5 / 2 == 2.5);整数除法用//(5 // 2 == 2)。%取余、**幂运算和 JS 语义类似,但**是 Python 的幂(JS 用Math.pow或**)。
4. 字符串与 f-string
JS 的模板字符串在 Python 里叫 f-string(格式化字符串):
const name = "Alice";
const age = 30;
console.log(`${name} is ${age} years old`);
name = "Alice"
age = 30
print(f"{name} is {age} years old")
f-string 前缀是
f,花括号内可以写任意表达式:f"{a + b}"。单引号和双引号在 Python 中完全等价,多行字符串用三引号
"""..."""。.format()是旧式写法,新代码直接用 f-string。
5. 布尔值大写、None
JS 的
true/false→ Python 的True/False(首字母大写)。JS 的
null/undefined→ Python 只有一个None。假值判断:Python 中
None、False、0、0.0、空字符串""、空容器[]/{}/()都为假,其余为真。和 JS 的 falsy 概念一致,但 Python 的空对象{}、[]也是假的(JS 里[]和{}是 truthy)。
6. if / elif / else
if (score >= 90) {
console.log("A");
} else if (score >= 80) {
console.log("B");
} else {
console.log("C");
}
if score >= 90:
print("A")
elif score >= 80: # 注意是 elif,不是 else if
print("B")
else:
print("C")
条件表达式不需要括号(写了也行,但官方风格不写)。
else if写作elif。
7. for…in 遍历
JS 的 for...of 遍历元素,Python 的 for...in 也遍历元素(不是索引!):
for (const item of ["a", "b", "c"]) {
console.log(item);
}
for item in ["a", "b", "c"]:
print(item)
想要"带索引遍历"用
enumerate(见第 0.3 章)。想要"遍历 0 到 n-1"用
range(n):for i in range(5):。
8. while 循环
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
i = 0
while i < 5:
print(i)
i += 1 # 没有 i++
9. 三元表达式(顺序相反)
const result = age >= 18 ? "成年" : "未成年";
result = "成年" if age >= 18 else "未成年"
语法是
值A if 条件 else 值B,真值在前,与 JS 的条件 ? 真 : 假顺序相反,注意别写反。
10. 逻辑运算符
if (!isLoading && (isAdmin || isEditor)) { ... }
if not isLoading and (is_admin or is_editor):
...
11. == 与 === 的区别
JS 有 ==(宽松)和 ===(严格),Python 只有 ==,但它是"按值严格比较"(类型不同直接不等):
"5" == 5; // true(宽松,会类型转换)
"5" === 5; // false(严格)
"5" == 5 # False,Python 的 == 不隐式转换,等价于 JS 的 ===
Python 的
==等价于 JS 的===(不做类型转换)。想判断"是否为同一个对象"(类似 JS 的引用相等)用
is。
12. 注释
// 单行注释
/* 多行注释 */
# 单行注释
"""
多行说明(其实是多行字符串,
但常被当注释用)
"""
代码示例
综合对照:一个判断奇偶并打印的例子
// JS
function describe(n) {
if (typeof n !== "number") return "不是数字";
return n % 2 === 0 ? `${n} 是偶数` : `${n} 是奇数`;
}
console.log(describe(4)); // "4 是偶数"
# Python
def describe(n):
if not isinstance(n, int):
return "不是数字"
return f"{n} 是偶数" if n % 2 == 0 else f"{n} 是奇数"
print(describe(4)) # "4 是偶数"
最佳实践
缩进统一用 4 个空格,不要混用 Tab(用编辑器把 Tab 设成 4 空格)。
布尔、None 记住大写:
True/False/None。字符串插值一律用 f-string,别用旧式
%格式化或.format()。比较相等直接用
==(它已经是严格比较),判断"是否同一对象"才用is。自增用
x += 1,忘掉x++。常量用全大写命名表达"别改我"的意图。
前端开发者常见陷阱
忘记冒号
::if x > 0后面要加冒号,否则语法错误——这是 JS 开发者最高频的错误。缩进不一致:复制粘贴代码后缩进乱了,直接
IndentationError。写
else if:Python 是elif,写else if会报错。用
===:Python 没有===,直接SyntaxError。用
let/const:Python 不需要,直接赋值即可;反之x = 1在 JS 里是全局污染,在 Python 里是正常声明。三元表达式写反:
a if cond else b,别写成 JS 的cond ? a : b。&&||!:写成andornot。i++:不存在的语法,用i += 1。空对象是真值还是假值:JS 里
[]是 truthy,Python 里[]是 falsy。if []:在 Python 中是False。字符串不可变:和 JS 一样,但 Python 字符串拼接频繁时用
join,别用+=循环拼接(性能差)。
总结
缩进(4 空格)+ 冒号
:取代了 JS 的大括号{}。没有
let/const/var,直接赋值;常量靠大写命名约定。True/False/None首字母大写,elif不是else if,逻辑用and/or/not。Python 的
==等价于 JS 的===,没有===这个符号。f-string 就是 Python 的模板字符串,
x if cond else y是它的三元表达式(注意顺序)。
0.2-语法与基础类型
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法