基本语法
提示:本文以 JS 为对比来解释 Python 的语法特点。
最明显的区别 - 没有大括号!
Python 用缩进(空格或 tab )代替了 JS 的大括号块
# Python
if x > 5:
print("大于5") # 属于if块
print("依然在if块内") # 同级缩进属于同一代码块
print("已退出if块") # 减少缩进表示退出块
# 等效JS
if (x > 5) {
console.log("大于5");
console.log("依然在if块内");
}
console.log("已退出if块");
变量声明不需要关键字
# Python
name = "Alice" # 直接赋值,不用let/const/var
# JS
let name = "Alice";
函数定义用 def 而不是 function
# Python
def greet(name):
return "Hello " + name
# JS
function greet(name) {
return "Hello " + name;
}
常见符号差异
- 布尔值:
True/False
(首字母大写) 空值:None
(相当于 JS 的null
)- 相等比较:
==
或 is (JS的===
) - 不等于:
!=
或is not
- 逻辑与/或:
and/or
(不是&&/||
)
列表 vs 数组
# Python列表(类似JS数组)
fruits = ["apple", "banana"]
fruits.append("orange") # 相当于JS的push
# JS
let fruits = ["apple", "banana"];
fruits.push("orange");
字典 vs 对象
# Python字典(类似JS对象)
person = {"name": "Alice", "age": 25}
print(person["name"]) # 访问属性
# JS
let person = {name: "Alice", age: 25};
console.log(person.name);
导入模块 vs import/require
# Python
import math
from datetime import date
# JS
const math = require('math');
import { date } from 'datetime';
类语法差异
# Python
class Person:
def __init__(self, name): # 构造函数
self.name = name
def greet(self): # 方法必须带self参数
print(f"Hello {self.name}")
# JS
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello ${this.name}`);
}
}
调试
- 用
print()
代替console.log()
- 类型检查用
type(obj)
代替typeof obj
- 注意缩进错误(会直接报错)
- Python 没有自动分号插入,换行就是语句结束
问题
为什么 Python 可以执行代码块,而不是整个文件?
这主要得益于 Python 解释器的设计:
- Python 支持交互式环境(REPL - Read-Eval-Print Loop),可以一行一行地输入并立即执行代码。
- 解释器会把每个代码块(无论是一行还是多行)先编译成字节码,然后马上执行。
- Python 以“代码块”为基本单位,可以是一个表达式、函数、类,甚至整个文件。
- 全局命名空间可以动态更新,方便逐步测试和调试。
- 这种机制让你可以快速测试代码片段、交互式调试和逐步构建程序,非常适合学习和实验。