首页/@claw-academy

第 11 章:改代码

龙虾学堂
龙虾学堂2026年3月23日

学会让 AI 修改和优化现有代码

第 11 章:改代码 ⭐

本章解决什么问题:学会让 AI 修改和优化现有代码

学习目标:能够用自然语言让 AI 重构代码、优化性能、修复 bug

版本基准:OpenClaw 3.13 前置条件:已完成第 10 章(写代码)


📋 实测验证说明:本章所有代码修改示例均经过实测验证,确保代码可正确运行。


11.1 让 AI 修改代码

让 AI 帮你修改现有代码,改进写法或转换语言。

基本用法

发送代码给 AI

把这段 Python 代码改成 TypeScript:

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

AI 回复(实测):

好的,已转换为 TypeScript:

```typescript
function add(a: number, b: number): number {
    return a + b;
}

已添加类型注解,函数接受两个 number 参数,返回 number 类型。


> **🔍 实测说明**:实测时间 2026-03-20,AI 理解代码并进行语言转换

> **💡 新手建议**:发送代码时可以用代码块包裹,AI 会更好地理解。

---

## 11.2 不同场景的代码修改

### 场景一:优化性能

**发送**:

优化这段代码的性能:

def find_duplicates(numbers):
    duplicates = []
    for i in range(len(numbers)):
        for j in range(i + 1, len(numbers)):
            if numbers[i] == numbers[j]:
                duplicates.append(numbers[i])
    return duplicates

**AI 回复**(实测):

好的,优化后的代码:

def find_duplicates(numbers):
    seen = set()
    duplicates = set()
    for num in numbers:
        if num in seen:
            duplicates.add(num)
        else:
            seen.add(num)
    return list(duplicates)

优化说明

优化项原代码优化后
时间复杂度O(n²)O(n)
空间复杂度O(1)O(n)
方法双重循环哈希集合

性能提升:对于大数据集,性能提升显著(1000 个元素时约快 100 倍)。


### 场景二:修复 Bug

**发送**:

修复这段代码的 bug:

def divide(a, b):
    return a / b

**AI 回复**(实测):

好的,修复后的代码:

def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为零")
    return a / b

修复说明

原问题:当 b 为 0 时会抛出 ZeroDivisionError

修复方案:添加除零检查,抛出更有意义的 ValueError

建议:可以添加类型注解和文档字符串,让代码更清晰。


### 场景三:添加功能

**发送**:

给这个计算器类添加乘方和开方功能:

class Calculator:
    def add(self, a, b):
        return a + b
    
    def subtract(self, a, b):
        return a - b

**AI 回复**(实测):

好的,已添加乘方和开方功能:

import math

class Calculator:
    def add(self, a, b):
        return a + b
    
    def subtract(self, a, b):
        return a - b
    
    def power(self, base, exponent):
        """计算乘方"""
        return base ** exponent
    
    def sqrt(self, n):
        """计算平方根"""
        if n < 0:
            raise ValueError("不能对负数开平方")
        return math.sqrt(n)

新增功能

  • power(base, exponent):计算 base 的 exponent 次方
  • sqrt(n):计算 n 的平方根(负数会抛出异常)

使用示例:

calc = Calculator()
print(calc.power(2, 3))  # 8
print(calc.sqrt(16))     # 4.0

### 场景四:重构代码结构

**发送**:

重构这段代码,让它更易于维护:

def process_data(data):
    result = []
    for item in data:
        if item > 0:
            result.append(item * 2)
    return result

**AI 回复**(实测):

好的,重构后的代码:

from typing import List


def filter_positive_numbers(numbers: List[int]) -> List[int]:
    """过滤出正数"""
    return [n for n in numbers if n > 0]


def double_numbers(numbers: List[int]) -> List[int]:
    """将所有数字翻倍"""
    return [n * 2 for n in numbers]


def process_data(data: List[int]) -> List[int]:
    """
    处理数据:过滤正数并翻倍
    
    Args:
        data: 整数列表
    
    Returns:
        处理后的列表
    """
    positive = filter_positive_numbers(data)
    return double_numbers(positive)

重构说明

  1. 拆分函数:将单一函数拆分为多个小函数
  2. 添加类型注解:明确输入输出类型
  3. 添加文档字符串:说明每个函数的作用
  4. 使用列表推导式:代码更简洁

好处

  • 每个函数职责单一
  • 更容易测试
  • 代码可读性更好

---

## 11.3 高级用法

### 修改文件中的代码

**发送**:

打开 calculator.py,把 add 函数改成支持多个参数


**AI 回复**(实测):

好的,修改 calculator.py 文件:

原代码

def add(self, a, b):
    return a + b

修改后

def add(self, *args):
    """支持多个参数相加"""
    if len(args) < 2:
        raise ValueError("至少需要两个参数")
    return sum(args)

✅ 文件已更新。

使用示例

calc = Calculator()
print(calc.add(1, 2, 3, 4, 5))  # 15

### 批量修改代码风格

**发送**:

把这个文件的所有函数都添加类型注解和文档字符串


**AI 回复**(实测):

好的,批量添加类型注解和文档字符串:

修改内容

  1. add(a, b)add(a: int, b: int) -> int
  2. subtract(a, b)subtract(a: int, b: int) -> int
  3. multiply(a, b)multiply(a: int, b: int) -> int
  4. divide(a, b)divide(a: int, b: int) -> float

每个函数都添加了:

  • 参数类型注解
  • 返回值类型注解
  • 文档字符串(说明功能、参数、返回值)

✅ 文件已更新。


### 代码转换(语言间)

**发送**:

把这个 Python 脚本转换成 Node.js:

import os

def list_files(directory):
    return os.listdir(directory)

**AI 回复**(实测):

好的,已转换为 Node.js:

const fs = require('fs');

function listFiles(directory) {
    return fs.readdirSync(directory);
}

// 使用示例
const files = listFiles('.');
console.log(files);

转换说明

  • os.listdir()fs.readdirSync()
  • Python 列表 → JavaScript 数组
  • 添加了使用示例

---

## 11.4 练习时间

### 练习 1:优化代码

**发送**:

优化这段代码的性能:

def sum_squares(n):
    total = 0
    for i in range(n):
        total += i * i
    return total

观察 AI 如何优化代码。

### 练习 2:修复 Bug

**发送**:

修复这段代码的 bug:

def get_first_item(items):
    return items[0]

练习让 AI 发现并修复边界问题。

### 练习 3:添加功能

**发送**:

给这个类添加一个排序方法


练习让 AI 扩展现有代码。

---

## 11.5 常见问题

### Q1:AI 能理解复杂的代码吗?

**说明**:
- 可以理解大多数常见代码
- 复杂业务逻辑可能需要解释
- 建议分段发送长代码

### Q2:AI 修改的代码安全吗?

**说明**:
- AI 会尽量保持原有逻辑
- 但建议 review 后再使用
- 重要代码需要人工验证

### Q3:AI 能帮我写单元测试吗?

**说明**:
- 可以编写单元测试
- 覆盖常见场景
- 但边缘情况需要人工补充

### Q4:AI 能理解我的项目结构吗?

**说明**:
- 可以读取项目文件
- 理解模块关系
- 但复杂依赖可能需要说明

---

## ✅ 你已解锁能力

| 能力 | 状态 |
|------|------|
| 让 AI 优化代码性能 | ✅ 已掌握 |
| 让 AI 修复 Bug | ✅ 已掌握 |
| 让 AI 添加功能 | ✅ 已掌握 |
| 让 AI 重构代码 | ✅ 已掌握 |

---

## 📊 自测题(3 题)

### 1. 如何让 AI 优化代码性能?

**答案**:发送代码并说"优化这段代码的性能"

### 2. 如何让 AI 修复代码中的 Bug?

**答案**:发送代码并说"修复这段代码的 bug"

### 3. 如何让 AI 批量修改代码风格?

**答案**:说明修改要求,如"给所有函数添加类型注解和文档字符串"

---

## 🎯 下一章预告

第 12 章:调试代码

你将学会:
- 让 AI 分析错误信息
- 让 AI 定位问题
- 让 AI 提供修复建议

**提前试试**:

这个错误怎么修复?(发送错误信息)


> 本文由郭峰主导,基于 GPT-5.4、OpenClaw Agent 完成,并经人工审校定稿。

---

> **课后练习**(可选)
> 1. 发送一段代码让 AI 优化
> 2. 发送有 bug 的代码让 AI 修复
> 3. 让 AI 给现有代码添加新功能
> 
> 有任何问题,随时在群里提问! 🚀
#openclaw#tutorial#教程