返回博客列表
技术分享

Java开发者7天速成Python:从语法到实战的完整指南

2026年02月03日
4 分钟阅读

Java开发者7天速成Python:从语法到实战的完整指南

引言

你是一位有Java基础的程序员,想要快速学习Python。但你不想从头开始——你希望用已有的编程思维快速切换到Python的优雅世界。

这篇文章就是为你准备的。

7天,每天1小时,从Java的严谨到Python的优雅,通过对比学习让你快速掌握Python的核心技能。

本文包含:

  • ✅ 丰富的代码示例(Java vs Python对比)
  • ✅ 每天练习题(带答案)
  • ✅ Day 7实战项目(股票分析工具)
  • ✅ 完整的学习路径

💡 提示:Cheat Sheet(Java-Python对照表)已单独整理成另一篇文章,本教程专注于实战学习。


📋 学习路径

天数 主题 核心目标
Day 1 语法基础 理解动态类型、掌握字符串切片
Day 2 控制流与函数 适应缩进语法、理解参数机制
Day 3 数据结构 掌握四大核心容器、列表推导式
Day 4 面向对象 理解类定义、继承、多态
Day 5 异常与文件 掌握异常处理、with语句、JSON
Day 6 高级特性 理解装饰器、生成器、上下文管理器
Day 7 实战项目 完成股票分析工具

Day 1: 语法基础

🎯 今日目标

  • 理解Python的动态类型 vs Java的静态类型
  • 掌握字符串切片(Python独有)
  • 学会f-string格式化

变量与类型

Java: 静态类型

// 必须声明类型
String name = "小熊";
int age = 28;
double salary = 11000.0;
boolean isActive = true;

// 类型不匹配会编译错误
// int x = "错误"; // ❌ 编译错误

Python: 动态类型

# 不需要声明类型,自动推断
name = "小熊"
age = 28
salary = 11000.0
is_active = True

# 同一变量可以改变类型(不推荐但允许)
x = 10        # int
x = "hello"    # str
x = [1, 2, 3] # list

关键差异

Java Python 差异
编译时类型检查 运行时类型推断 Python更灵活但易出错
int x = 3.14 会报错 x = 3.14 正常,类型是float Python不自动转换
null None 空值表示
final 无,用大写常量 MAX_SIZE = 100

字符串切片(Python独有)

Java

String s = "Hello World";
s.substring(0, 5);       // "Hello"
s.substring(6);          // "World"

Python

s = "Hello World"
s[0:5]                    # "Hello" - 索引0到4
s[6:]                      # "World" - 从6到末尾
s[:5]                       # "Hello" - 从开始到4
s[::2]                       # "HloWrd" - 每隔一个
s[::-1]                      # "dlroW olleH" - 反转
s[-1]                        # "d" - 最后一个

Java需要用substring()或循环,Python一行搞定。

切片语法总结

s[start:end:step]
  • start:起始位置(包含)
  • end:结束位置(不包含)
  • step:步长

实用示例

# 提取文件名
filename = "data_20260203.csv"
name = filename[:-4]  # "data"

# 提取扩展名
ext = filename[-4:]  # ".csv"

# 反转字符串
reversed = s[::-1]

# 每隔一个字符取
every_other = s[::2]

f-string格式化

Java

String name = "小熊";
int age = 28;

System.out.println("Hello, " + name);
System.out.printf("Age: %d\n", age);

Python

name = "小熊"
age = 28
salary = 11000.5

# f-string - 最直观
print(f"Hello, {name}")
print(f"Age: {age}")
print(f"Salary: {salary:.2f}")       # 保留2位小数
print(f"Age: {age:03d}")           # 补零到3位

# 对齐输出
print(f"{'姓名':<10}{'年龄':>5}")      # 左右对齐

Day 1 练习

任务1:个人信息收集器

# 从控制台读取
name = input("姓名: ")
age = int(input("年龄: "))
salary = float(input("月薪: "))
is_developer = input("是程序员吗(y/n): ") == 'y'

# 用f-string输出
print(f"""
=== 个人信息 ===
姓名: {name}
年龄: {age}
月薪: {salary:.2f}
职业: {'开发者' if is_developer else '其他'}
""")

任务2:字符串切片练习

s = "Python Programming Language"

# TODO: 提取"Python"
print(s[0:6])

# TODO: 提取"Language"
print(s[-8:])

# TODO: 反转字符串
print(s[::-1])

# TODO: 每隔一个字符取一个字符
print(s[::2])

答案

# 任务2答案
print(s[0:6])        # "Python"
print(s[-8:])           # "Language"
print(s[::-1])          # "egauLgnimmartoP nohtyP"
print(s[::2])           # "Pto rgamn iguaLn"

Day 2: 控制流与函数

🎯 今日目标

  • 适应Python的缩进语法(无花括号)
  • 理解参数机制(位置、默认、可变、关键字)
  • 掌握lambda表达式

缩进与代码块

Java

public void process(int x) {
    if (x > 0) {
        System.out.println("正数");
    } else {
        System.out.println("非正数");
    }

    for (int i = 0; i < 10; i++) {
        System.out.println(i);
    }
}

Python

def process(x):
    # 缩进表示代码块(通常是4个空格)
    if x > 0:
        print("正数")
    else:
        print("非正数")

    for i in range(10):
        print(i)

⚠️ 易错点

Java习惯 Python现实 结果
忘记写分号; 不需要分号 ✅ 正确
用花括号{} 用缩进 ❌ 语法错误
if (x > 0) if x > 0: ❌ 需要冒号
else if elif ❌ 语法错误

enumerate() - 同时获取索引和值

Java

String[] names = {"小熊", "Jiavis", "Python"};
for (int i = 0; i < names.length; i++) {
    System.out.println(i + ": " + names[i]);
}

Python

names = ["小熊", "Jiavis", "Python"]
for index, name in enumerate(names):
    print(f"{index}: {name}")

参数机制

默认参数(注意坑)

# ⚠️ 注意:默认参数只计算一次!
def add_item(item, items=[]):    # ❌ 错误!
    items.append(item)
    return items

# 正确做法
def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

关键字参数

def create_user(name, age, city="上海"):
    print(f"{name}, {age}, {city}")

# 位置参数
create_user("小熊", 28)

# 关键字参数
create_user(name="小熊", age=28)

# 混合(Python独有:可以打乱顺序)
create_user(city="北京", age=28, name="小熊")

Lambda表达式

Java

import java.util.function.*;

Consumer<String> printer = s -> System.out.println(s);
Function<Integer, Integer> doubler = x -> x * 2;
Predicate<Integer> isEven = x -> x % 2 == 0;

Python

# Lambda语法:lambda args: expression
printer = lambda s: print(s)
doubler = lambda x: x * 2
is_even = lambda x: x % 2 == 0

# 使用
printer("Hello")
print(doubler(5))
print(is_even(4))

# 与内置函数配合
numbers = [1, 2, 3, 4, 5]
even = list(filter(lambda x: x % 2 == 0, numbers))
squared = list(map(lambda x: x ** 2, numbers))
total = sum(map(lambda x: x, numbers))

Day 2 练习

任务1:计算器函数

def calculator(a, b, operation):
    """
    实现加减乘除
    - operation: "+", "-", "*", "/"
    - 除法检查除0
    """
    if operation == "+":
        return a + b
    elif operation == "-":
        return a - b
    elif operation == "*":
        return a * b
    elif operation == "/":
        if b == 0:
            return "不能除0"
        return a / b
    else:
        return "未知操作"

# 测试
print(calculator(10, 5, "+"))   # 15
print(calculator(10, 5, "/"))   # 2.0
print(calculator(10, 0, "/"))   # "不能除0"

任务2:Lambda练习

numbers = list(range(1, 21)))

# TODO: 用lambda筛选出偶数
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)

# TODO: 用lambda计算平方
squared = list(map(lambda x: x ** 2, numbers))
print(squared)

# TODO: 用lambda求和
total = sum(map(lambda x: x, numbers))
print(total)

Day 3: 数据结构

🎯 今日目标

  • 掌握列表推导式(核心特性)
  • 学会字典高级操作
  • 理解元组和解包

列表推导式

传统方式

# Java风格(啰嗦)
squares = []
for i in range(10):
    squares.append(i ** 2)
print(squares)

列表推导式

# Python风格(一行搞定)
squares = [i ** 2 for i in range(10)]
print(squares)

# 带条件
even_squares = [i ** 2 for i in range(10) if i % 2 == 0]
print(even_squares)

# 嵌套循环(扁平化矩阵)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)

字典推导式

# 传统方式
squared = {}
for i in range(5):
    squared[i] = i ** 2

# 字典推导式(一行搞定)
squared = {i: i ** 2 for i in range(5)}
print(squared)

# 带条件
even_squared = {i: i ** 2 for i in range(10) if i % 2 == 0}
print(even_squared)

zip() - 同时遍历多个列表

names = ["小熊", "Jiavis", "Python"]
ages = [28, 999, 33]
scores = [85, 95, 90]

# 同时遍历
for name, age, score in zip(names, ages, scores):
    print(f"{name}: {age}岁, {score}分")

Day 3 练习

任务1:列表推导式

# 1. 生成1-100中能被3整除的数列表
div_by_3 = [x for x in range(1, 101) if x % 3 == 0]
print(div_by_3[:10])

# 2. 将单词首字母大写
words = ["hello", "world", "python"]
capitalized = [w.capitalize() for w in words]
print(capitalized)

# 3. 筛选素数
def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

primes = [n for n in range(1, 101) if is_prime(n)]
print(primes[:10])
print(f"前100个素数: {len(primes)}个")

任务2:字典统计

text = "python python java java python"
word_count = {}

for word in text.split():
    word_count[word] = word_count.get(word, 0) + 1

print(word_count)
# {'python': 3, 'java': 3}

Day 4: 面向对象

🎯 今日目标

  • 理解Python的类定义
  • 掌握self的使用
  • 学会继承和方法重写

类定义对比

Java

public class User {
    // 私有字段
    private String name;
    private int age;

    // 构造器
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter/Setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 方法
    public void greet() {
        System.out.println("Hello, " + name);
    }
}

Python

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"Hello, {self.name}")

user = User("小熊", 28)
user.greet()

多继承(Python独有)

// Java不支持多继承(用接口)
public class Duck implements Flyable, Swimable {
    // ...
}
# Python支持多继承!
class Flyable:
    def fly(self):
        print("Flying...")

class Swimable:
    def swim(self):
        print("Swimming...")

class Duck(Flyable, Swimable):  # 多继承
    pass

duck = Duck()
duck.fly()
duck.swim()

Day 4 练习

class BankAccount:
    """
    实现以下功能:
    - 存款(deposit)
    - 取款(withdraw)
    - 查询余额(get_balance)
    - 显示账户信息(__str__)
    """
    def __init__(self, owner, initial_balance=0):
        self.owner = owner
        self.balance = initial_balance

    def deposit(self, amount):
        if amount <= 0:
            raise ValueError("存款金额必须大于0")
        self.balance += amount
        return self.balance

    def withdraw(self, amount):
        if amount > self.balance:
            return False
        self.balance -= amount
        return True

    def get_balance(self):
        return self.balance

    def __str__(self):
        return f"账户: {self.owner}, 余额: {self.balance:.2f}元"

# 测试
account = BankAccount("小熊", 1000)
account.deposit(500)
print(account)
account.withdraw(200)
print(account.get_balance())

Day 5: 异常处理与文件操作

🎯 今日目标

  • 掌握异常处理(try-except-else-finally)
  • 理解with语句(上下文管理器)
  • 学会JSON操作

with语句(上下文管理器)

这是Python最优雅的特性之一。

Java

FileInputStream fis = null;
try {
    fis = new FileInputStream("file.txt");
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (fis != null) {
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Python

# 自动管理资源(自动关闭)
with open("file.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

# 文件已经自动关闭了,不需要finally

Day 5 练习

import json
from datetime import datetime

class Logger:
    def __init__(self, filename="app.log"):
        self.filename = filename

    def info(self, message):
        self._write_log("INFO", message)

    def error(self, message):
        self._write_log("ERROR", message)

    def _write_log(self, level, message):
        log_entry = {
            "timestamp": datetime.now().isoformat(),
            "level": level,
            "message": message
        }
        with open(self.filename, "a", encoding="utf-8") as f:
            f.write(json.dumps(log_entry, ensure_ascii=False) + "\n")

# 测试
logger = Logger()
logger.info("程序启动")
logger.error("发生错误")

Day 6: 高级特性

🎯 今日目标

  • 理解装饰器
  • 掌握生成器和yield
  • 学会上下文管理器

装饰器

传统方式

def add(a, b):
    result = a + b
    print(f"{a} + {b} = {result}")
    return result

装饰器方式

def log_function(func):
    def wrapper(*args, **kwargs):
        print(f"调用函数: {func.__name__}")
        result = func(*args, **kwargs)
        print(f"返回结果: {result}")
        return result
    return wrapper

@log_function
def add(a, b):
    return a + b

生成器

列表方式

def get_squares(n):
    result = []
    for i in range(n):
        result.append(i ** 2)
    return result

生成器方式

def get_squares_generator(n):
    for i in range(n):
        yield i ** 2

for square in get_squares_generator(10):
    print(square)

Day 6 练习

# 任务1:缓存装饰器
def memoize(func):
    cache = {}
    def wrapper(*args):
        key = args
        if key in cache:
            print("从缓存读取")
            return cache[key]
        result = func(*args)
        cache[key] = result
        return result
    return wrapper

@memoize
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(35))

Day 7: 实战项目

🎯 今日目标

  • 应用前6天学到的知识
  • 完成一个实际项目
  • 巩固Python技能

项目:股票分析工具

import json
from datetime import datetime

class StockAnalyzer:
    def __init__(self, stock_data_file):
        self.stocks = self._load_data(stock_data_file)

    def _load_data(self, filename):
        try:
            with open(filename, 'r', encoding='utf-8') as f:
                return json.load(f)
        except FileNotFoundError:
            print(f"文件 {filename} 不存在")
            return {}

    def analyze(self, code):
        if code not in self.stocks:
            return f"股票 {code} 不存在"

        stock = self.stocks[code]
        name = stock.get('name', '未知')
        price = stock.get('price', 0)
        ma5 = stock.get('ma5', 0)

        if price > ma5 * 1.05:
            advice = "观望(价格超过MA5 5%)"
        elif price > ma5:
            advice = "持有(价格高于MA5)"
        else:
            advice = "关注(价格低于MA5)"

        return f"""
=== {name}({code}) 分析 ===
当前价格: {price}
MA5: {ma5}
建议: {advice}
分析时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
"""

    def batch_analyze(self, codes):
        print(f"=== 批量分析 {len(codes)} 只股票 ===")
        for code in codes:
            result = self.analyze(code)
            print(result)

    def export_report(self, codes, filename):
        report = []
        for code in codes:
            if code in self.stocks:
                stock = self.stocks[code]
                report.append({
                    "code": code,
                    "name": stock.get('name', '未知'),
                    "price": stock.get('price', 0),
                    "ma5": stock.get('ma5', 0),
                })

        with open(filename, 'w', encoding='utf-8') as f:
            json.dump(report, f, ensure_ascii=False, indent=2)
        print(f"报告已导出到 {filename}")


# 示例数据
sample_data = {
    "600519": {
        "name": "贵州茅台",
        "price": 1800.0,
        "ma5": 1750.0,
        "ma10": 1720.0,
        "ma20": 1700.0,
    },
    "000001": {
        "name": "平安银行",
        "price": 15.5,
        "ma5": 15.8,
        "ma10": 15.6,
        "ma20": 15.4,
    },
}

# 保存示例数据
with open('stocks.json', 'w', encoding='utf-8') as f:
    json.dump(sample_data, f, ensure_ascii=False, indent=2)

# 使用示例
if __name__ == "__main__":
    analyzer = StockAnalyzer('stocks.json')
    print(analyzer.analyze("600519"))
    analyzer.batch_analyze(["600519", "000001"])
    analyzer.export_report(["600519", "000001"], "report.json")

项目扩展任务

# 任务1:添加技术指标计算
def calculate_ma(prices, period=5):
    return [sum(prices[i-period+1:i+1])/period
            for i in range(period-1, len(prices))]

# 任务2:添加可视化(需要matplotlib)
# pip install matplotlib
# def draw_chart(data):
#     import matplotlib.pyplot as plt
#     ...

# 任务3:添加回测功能
def backtest_strategy(stock_data, buy_condition, sell_condition):
    pass

🎯 学习完成总结

核心差异

维度 Java Python
类型系统 静态类型 动态类型
语法 花括号、分号 缩进、无分号
变量声明 int x = 10; x = 10
空值 null None
布尔值 true/false True/False
字符串 不可变,equals() 不可变,==
数组 int[](固定) list(动态)
字典 Map<K,V> dict
继承 单继承 + 接口 多继承
异常 try-catch-finally try-except-else-finally
资源管理 try-finally with语句
装饰器 AOP框架 @decorator
生成器 Iterator接口 yield

下一步学习

基础巩固

  • 练习100道Python题目
  • 完成LeetCode前50题(Python版本)
  • 阅读《Python Cookbook》

进阶方向

  • 数据分析:NumPy, Pandas, Matplotlib
  • Web开发:Django, Flask, FastAPI
  • 自动化:Selenium, PyAutoGUI, requests
  • 机器学习:Scikit-learn, TensorFlow, PyTorch

推荐资源

官方文档

书籍

  • 《Python Crash Course》
  • 《Fluent Python》
  • 《Effective Python》

在线资源


恭喜!你已经掌握了Python的基础知识。现在可以开始你的Python之旅了! 🚀


文档版本:v3.0 最后更新:2026-02-03 作者:Jiavis 致:小熊