Appearance
Python 与 JavaScript 语法差异对比
本文档详细对比了Python和JavaScript在语法上的主要差异,通过代码示例帮助理解两种语言的不同特点。
1. 变量声明和作用域
JavaScript
javascript
// 变量声明
var oldStyle = "旧方式"; // 函数作用域
let blockScoped = "块级作用域"; // 块级作用域
const constant = "常量"; // 常量,块级作用域
// 类型可以改变
let variable = 42;
variable = "现在是字符串";
Python
python
# 变量声明 - 直接赋值
old_style = "Python风格" # 使用下划线命名
block_scoped = "没有特殊声明关键字"
CONSTANT = "常量约定用大写" # 约定,不是强制
# 类型可以改变
variable = 42
variable = "现在是字符串"
2. 数据类型
JavaScript
javascript
// 基本数据类型
let number = 42;
let string = "字符串";
let boolean = true;
let undefined_val = undefined;
let null_val = null;
let symbol = Symbol("唯一标识");
let bigint = 123n;
// 复合数据类型
let array = [1, 2, 3];
let object = { name: "张三", age: 25 };
// 类型检查
console.log(typeof number); // "number"
console.log(Array.isArray(array)); // true
Python
python
# 基本数据类型
number_int = 42
number_float = 3.14
string = "字符串"
boolean = True # 注意大写
none_val = None # 相当于JS的null
# 复合数据类型
list_type = [1, 2, 3] # 列表(类似JS数组)
tuple_type = (1, 2, 3) # 元组(不可变)
dict_type = {"name": "张三", "age": 25} # 字典(类似JS对象)
set_type = {1, 2, 3} # 集合
# 类型检查
print(type(number_int)) # <class 'int'>
print(isinstance(list_type, list)) # True
3. 函数定义
JavaScript
javascript
// 函数声明
function greet(name) {
return `你好, ${name}!`;
}
// 函数表达式
const greetArrow = (name) => {
return `你好, ${name}!`;
};
// 简写箭头函数
const greetShort = name => `你好, ${name}!`;
// 默认参数
function greetDefault(name = "世界") {
return `你好, ${name}!`;
}
// 调用
console.log(greet("小明"));
Python
python
# 函数定义
def greet(name):
return f"你好, {name}!"
# 默认参数
def greet_default(name="世界"):
return f"你好, {name}!"
# 关键字参数
def greet_full(first_name, last_name=""):
return f"你好, {first_name} {last_name}!"
# Lambda函数(类似JS箭头函数)
greet_lambda = lambda name: f"你好, {name}!"
# 调用
print(greet("小明"))
print(greet_full("张", last_name="三"))
print(greet_lambda("小红"))
4. 条件语句
JavaScript
javascript
// if-else
let score = 85;
if (score >= 90) {
console.log("优秀");
} else if (score >= 80) {
console.log("良好");
} else {
console.log("需要努力");
}
// 三元操作符
let result = score >= 60 ? "及格" : "不及格";
// switch语句
switch (score) {
case 100:
console.log("满分");
break;
case 90:
console.log("优秀");
break;
default:
console.log("继续努力");
}
Python
python
# if-elif-else
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
else:
print("需要努力")
# 三元操作符(条件表达式)
result = "及格" if score >= 60 else "不及格"
# Python没有switch,使用字典或if-elif替代
def score_level(score):
levels = {
100: "满分",
90: "优秀",
}
return levels.get(score, "继续努力")
print(score_level(100))
5. 循环语句
JavaScript
javascript
// for循环
for (let i = 0; i < 5; i++) {
console.log(i);
}
// for...of (遍历值)
let fruits = ["苹果", "香蕉", "橙子"];
for (let fruit of fruits) {
console.log(fruit);
}
// for...in (遍历键/索引)
for (let index in fruits) {
console.log(index, fruits[index]);
}
// while循环
let count = 0;
while (count < 3) {
console.log(count);
count++;
}
// forEach方法
fruits.forEach((fruit, index) => {
console.log(index, fruit);
});
Python
python
# for循环 - 使用range
for i in range(5):
print(i)
# for循环 - 直接遍历
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
# enumerate - 获取索引和值
for index, fruit in enumerate(fruits):
print(index, fruit)
# while循环
count = 0
while count < 3:
print(count)
count += 1
# 列表推导式(Python特有)
squares = [x**2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]
6. 对象/类定义
JavaScript
javascript
// ES6类
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
return `我是${this.name},今年${this.age}岁`;
}
static species() {
return "智人";
}
}
// 继承
class Student extends Person {
constructor(name, age, grade) {
super(name, age);
this.grade = grade;
}
study() {
return `${this.name}正在学习`;
}
}
let student = new Student("小明", 16, "高一");
console.log(student.greet());
console.log(student.study());
Python
python
# Python类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"我是{self.name},今年{self.age}岁"
@staticmethod
def species():
return "智人"
@classmethod
def from_string(cls, person_str):
name, age = person_str.split('-')
return cls(name, int(age))
# 继承
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age) # 或者 Person.__init__(self, name, age)
self.grade = grade
def study(self):
return f"{self.name}正在学习"
student = Student("小明", 16, "高一")
print(student.greet())
print(student.study())
7. 异常处理
JavaScript
javascript
// try-catch-finally
function divide(a, b) {
try {
if (b === 0) {
throw new Error("除数不能为零");
}
return a / b;
} catch (error) {
console.log("捕获错误:", error.message);
return null;
} finally {
console.log("执行清理工作");
}
}
// Promise异常处理
async function fetchData() {
try {
let response = await fetch('https://api.example.com/data');
let data = await response.json();
return data;
} catch (error) {
console.log("网络错误:", error);
}
}
Python
python
# try-except-finally
def divide(a, b):
try:
if b == 0:
raise ValueError("除数不能为零")
return a / b
except ValueError as e:
print(f"捕获错误: {e}")
return None
except Exception as e:
print(f"未知错误: {e}")
return None
finally:
print("执行清理工作")
# 上下文管理器
def read_file(filename):
try:
with open(filename, 'r', encoding='utf-8') as file:
content = file.read()
return content
except FileNotFoundError:
print(f"文件 {filename} 不存在")
return None
8. 模块和导入
JavaScript
javascript
// 导出 (module.js)
export const PI = 3.14159;
export function add(a, b) {
return a + b;
}
export default function multiply(a, b) {
return a * b;
}
// 导入
import multiply, { PI, add } from './module.js';
import * as math from './module.js';
console.log(PI);
console.log(add(2, 3));
console.log(multiply(2, 3));
Python
python
# 导出 (math_utils.py)
PI = 3.14159
def add(a, b):
return a + b
def multiply(a, b):
return a * b
# 导入
import math_utils
from math_utils import PI, add
from math_utils import multiply as mult
print(PI)
print(add(2, 3))
print(mult(2, 3))
print(math_utils.PI)
9. 字符串操作
JavaScript
javascript
let name = "小明";
let age = 25;
// 字符串拼接
let message1 = "我是" + name + ",今年" + age + "岁";
let message2 = `我是${name},今年${age}岁`; // 模板字符串
// 字符串方法
let text = " Hello World ";
console.log(text.trim()); // "Hello World"
console.log(text.toLowerCase()); // " hello world "
console.log(text.split(" ")); // ["", "", "Hello", "World", "", ""]
Python
python
name = "小明"
age = 25
# 字符串拼接
message1 = "我是" + name + ",今年" + str(age) + "岁"
message2 = f"我是{name},今年{age}岁" # f-string (推荐)
message3 = "我是{},今年{}岁".format(name, age) # format方法
# 字符串方法
text = " Hello World "
print(text.strip()) # "Hello World"
print(text.lower()) # " hello world "
print(text.split(" ")) # ['', '', 'Hello', 'World', '', '']
10. 主要语法差异总结
特性 | JavaScript | Python |
---|---|---|
缩进 | 使用大括号 {} | 使用缩进(4个空格) |
行尾 | 分号可选 | 不需要分号 |
注释 | // 或 /* */ | # 或 """ |
布尔值 | true/false | True/False |
空值 | null/undefined | None |
相等比较 | == (类型转换)=== (严格) | == (值比较) |
逻辑操作符 | && || ! | and or not |
字符串 | "" 或 '' | "" '' 或 """ |
数组/列表 | [1,2,3] | [1,2,3] |
对象/字典 | {key: value} | {"key": value} |
总结
Python和JavaScript虽然都是动态类型语言,但在语法风格上有显著差异:
- Python更注重代码的可读性,使用缩进来组织代码结构
- JavaScript更灵活,提供了多种语法糖和现代特性
- Python的命名约定使用下划线,JavaScript使用驼峰命名
- Python有更丰富的内置数据类型(如元组、集合)
- JavaScript的异步编程模型更加突出
理解这些差异有助于在Vue.js项目开发中更好地运用JavaScript,同时也为学习Python打下基础。