Py 语法
数据类型
Python 与 Node.js 数据类型的区别
| 特性 | Python | Node.js (JavaScript) |
| 数字类型 | 分为 int、float、complex | 统一为 number |
| 布尔类型 | True 和 False | true 和 false |
| 空值类型 | None | null 和 undefined |
| 字符串类型 | str | string |
| 列表/数组 | list(可变) | array(可变) |
| 元组 | tuple(不可变) | 无直接对应,可用数组模拟 |
| 集合 | set 和 frozenset | Set |
| 字典/对象 | dict | object |
| 函数类型 | 函数是一等对象 | 函数是一等对象 |
| 符号类型 | 无 | symbol |
| 大整数类型 | 无 | bigint |
| 字节类型 | bytes 和 bytearray | Buffer 和 TypedArray |
| 日期类型 | datetime 模块 | Date 对象 |
| 正则表达式 | re 模块 | RegExp 对象 |
基本类型
- 数字类型:
int:整数,如 10 float:浮点数,如 3.14 complex:复数,如 1+2j
- 布尔类型:
True 和 False - 空值类型:
None - 字符串类型:
str:字符串,如 'hello'
复合类型
- 列表/数组
list:列表,如 [1, 2, 3] - 元组
tuple:元组,如 (1, 2, 3) - 字典/对象
dict:字典,如 {'a': 1, 'b': 2} - 集合
set:集合,如 {1, 2, 3}
字节类型
bytes:字节,如 b'hello' bytearray:字节数组,如 bytearray(b'hello')
语句
Python 与 Node.js 的语法区别
| 特性 | Python | Node.js (JavaScript) |
| for 循环 | 使用 for i in range(n) | 使用 for (let i = 0; i < n; i++) |
| 遍历数组/列表 | 直接遍历 for item in list | 使用 forEach 或 for...of |
| if 条件 | 使用 if、elif、else | 使用 if、else if、else |
| 三元运算符 | x if condition else y | condition ? x : y |
| 单行注释 | 使用 # | 使用 // |
| 多行注释 | 使用 """ 或 ''' | 使用 /* */ |
| 代码块 | 使用缩进(通常是 4 个空格) | 使用 {} 包裹代码块 |
| 变量声明 | 无需声明类型,直接赋值 | 使用 let、const 或 var |
迭代
for:迭代,如 for i in range(10) while:循环,如 while i < 10
条件
if:条件,如 if i < 10 elif:条件,如 elif i < 20 - 三元表达式:
result = "大于 5" if x > 5 else "小于等于 5"
函数
Python 与 Node.js 函数的对比
| 特性 | Python | Node.js (JavaScript) |
| 函数定义 | 使用 def 关键字 | 使用 function 或箭头函数 |
| 默认参数 | 支持 | 支持 |
| 可变参数 | 使用 *args | 使用 ...args |
| 返回值 | 可返回多个值(元组) | 只能返回一个值(可返回对象) |
| 匿名函数 | 使用 lambda | 使用箭头函数 |
| 作用域 | 局部作用域和全局作用域 | 块级作用域和函数作用域 |
| 装饰器 | 支持 | 不支持(可通过高阶函数模拟) |
| 回调函数 | 不常用(通常用 async/await) | 广泛使用 |
| 异步处理 | 使用 async/await | 使用 async/await 或回调 |
函数使用
- 函数定义:
def function_name(parameters): - 默认参数:
类
Python 与 Node.js 类的对比
| 特性 | Python | Node.js (JavaScript) |
| 类定义 | 使用 class 关键字 | 使用 class 关键字(ES6) |
| 构造函数 | 使用 init 方法 | 使用 constructor 方法 |
| 实例方法 | 使用 self 参数 | 使用 this 关键字 |
| 类变量 | 直接定义在类中 | 使用 static 关键字 |
| 继承 | 支持单继承和多继承 | 仅支持单继承 |
| 特殊方法 | 支持(如 str、add) | 不支持(可通过方法模拟) |
| 访问控制 | 通过命名约定(_name、__name) | 通过 # 定义私有成员(ES2022) |
| 多态 | 支持 | 支持 |
| 动态性 | 支持动态添加属性和方法 | 支持动态添加属性和方法 |
定义
Python 没有严格的访问控制,但通过命名约定实现:
_name:表示受保护的成员(约定)。 __name:表示私有成员(名称修饰)。
模块
Python 与 Node.js 模块的对比
| 特性 | Python | Node.js (JavaScript) |
| 模块定义 | .py 文件 | .js 文件 |
| 模块导出 | 默认导出整个模块 | 使用 module.exports 或 exports |
| 模块导入 | import 或 from ... import ... | require |
| 模块路径解析 | sys.path | node_modules 和全局路径 |
| 模块缓存 | sys.modules | require.cache |
| 循环依赖 | 支持,但需谨慎 | 支持,但需谨慎 |
| 核心模块 | 标准库(如 os、sys) | 核心模块(如 fs、path) |
| 第三方模块 | 使用 pip 安装 | 使用 npm 或 yarn 安装 |
模块路径解析
Python 使用 sys.path 解析模块路径。模块搜索路径包括顺序:
- 当前目录
PYTHONPATH 环境变量 - 标准库路径
- 安装路径
模块缓存
模块在第一次导入时会被缓存,后续导入直接使用缓存。缓存存储在 sys.modules 中。