目錄
- 語法基礎差異
- 變數宣告和型別
- 物件導向程式設計
- 函式宣告與呼叫
- 繼承與多型
- 集合操作
- 特殊方法與裝飾器
- 異常處理
- Python特有特性
- 快速入門建議
1. 語法基礎差異
程式碼塊定義
Java:
public class Example {
public void method() {
if (condition) {
// code block
}
}
}
Python:
def method():
if condition:
# code block
主要區別:
- Python 使用縮排來定義程式碼塊,不需要花括號
- Python 不需要分號結尾
- Python 不需要顯式宣告類(除非必要)
2. 變數宣告和型別
Java:
String name = "John";
int age = 25;
List<String> list = new ArrayList<>();
Python:
name = "John" # 動態型別,無需宣告
age = 25
list = [] # 列表宣告更簡單
主要區別:
- Python 是動態型別語言,不需要顯式宣告變數型別
- Python 的變數可以隨時改變型別
- Python 的集合型別(列表、字典等)使用更簡單
3. 物件導向程式設計
Java:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello, " + this.name);
}
}
Python:
class Person:
def __init__(self, name):
self.name = name
def say_hello(self):
print(f"Hello, {self.name}")
主要區別:
- Python 使用
self
代替 Java 的this
- Python 不需要宣告訪問修飾符(public/private)
- Python 使用
__init__
作為建構函式 - Python 的方法命名通常使用下劃線命名法
4. 函式宣告與呼叫
基本函式宣告
Java:
public class Example {
// 基本函式宣告
public int add(int a, int b) {
return a + b;
}
// 靜態方法
public static void staticMethod() {
System.out.println("Static method");
}
// 可變引數
public void printAll(String... args) {
for(String arg : args) {
System.out.println(arg);
}
}
}
Python:
# 基本函式宣告
def add(a, b):
return a + b
# 靜態方法
@staticmethod
def static_method():
print("Static method")
# 可變引數
def print_all(*args):
for arg in args:
print(arg)
# 帶預設引數的函式
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}")
# 關鍵字引數
def person_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
5. 繼承與多型
Java:
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void makeSound() {
System.out.println("Some sound");
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println("Woof!");
}
}
Python:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("Some sound")
class Dog(Animal):
def __init__(self, name):
super().__init__(name)
def make_sound(self):
print("Woof!")
# 多重繼承示例
class Pet:
def play(self):
print("Playing")
class DomesticDog(Dog, Pet):
pass
6. 集合操作
列表/陣列操作
Java:
List<String> list = Arrays.asList("a", "b", "c");
Map<String, Integer> map = new HashMap<>();
map.put("key", 1);
Python:
list = ["a", "b", "c"]
dict = {"key": 1}
# 列表操作
list.append("d")
list[0] # 訪問元素
list[1:3] # 切片操作
# 字典操作
dict["new_key"] = 2
7. 特殊方法與裝飾器
特殊方法(魔術方法)
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Person: {self.name}"
def __eq__(self, other):
if isinstance(other, Person):
return self.name == other.name
return False
屬性裝飾器
class Person:
def __init__(self):
self._name = None
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
8. 異常處理
Java:
try {
throw new Exception("Error");
} catch (Exception e) {
System.out.println("Caught: " + e.getMessage());
} finally {
// 清理程式碼
}
Python:
try:
raise Exception("Error")
except Exception as e:
print(f"Caught: {str(e)}")
finally:
# 清理程式碼
9. Python特有特性
列表推導式
# 生成 1-10 的平方數列表
squares = [x**2 for x in range(1, 11)]
切片操作
list = [1, 2, 3, 4, 5]
print(list[1:3]) # 輸出 [2, 3]
多重賦值
a, b = 1, 2
x, y = y, x # 交換變數值
10. 快速入門建議
- 重點關注 Python 的縮排規則
- 習慣不使用型別宣告
- 多使用 Python 的內建函式和特性
- 學習 Python 的列表推導式和切片操作
- 使用 f-string 進行字串格式化
- 熟悉 Python 的命名規範(下劃線命名法)
- 理解 Python 的繼承機制,特別是
super()
的使用 - 掌握 Python 的特殊方法(魔術方法)
- 學習使用裝飾器
- 瞭解 Python 的異常處理機制
推薦學習資源
- Python 官方文件:https://docs.python.org/
- Python 互動式學習平臺:https://www.pythontutor.com/
- LeetCode Python 練習題
- Real Python 網站:https://realpython.com/
記住,Python 推崇簡潔和可讀性,很多 Java 中的複雜結構在 Python 中都有更簡單的實現方式。建議從簡單的程式開始,逐步熟悉 Python 的特性和語法。