首页 / Python 编程语言学习笔记


Copyright ©2025 luckyxi的学习日志 | All Rights Reserved

粤ICP备2025495461号-1

粤公网安备44060402003071号

# Python 编程语言学习笔记

> 📝 编写时间:2025年12月9日  
> 🎯 适用对象:Python 初学者至中级开发者  
> 🐍 Python 版本:3.10+(推荐使用最新稳定版)

---

## 一、Python 简介与核心特性

Python 是一种**高级、解释型、通用编程语言**,由 Guido van Rossum 于 1991 年首次发布。其设计哲学强调**代码可读性**与**简洁性**,以缩进(Indentation)定义代码块,显著区别于多数使用大括号 `{}` 的语言。

### ✅ 核心优势
- **语法简洁**:接近自然语言,学习曲线平缓  
- **丰富标准库**:“batteries included”理念,覆盖文件处理、网络、正则、并发等  
- **跨平台支持**:Windows / macOS / Linux 无缝运行  
- **强大生态**:PyPI(Python Package Index)拥有超 50 万第三方包  
- **多范式支持**:面向对象、函数式、过程式编程均可实现

---

## 二、基础语法速览

### 1. 变量与数据类型

Python 是**动态类型语言**,变量无需声明类型,解释器自动推断。

```python
# 常见内置类型
name = "Alice"          # str(字符串,Unicode 编码)
age = 30                # int(任意精度整数)
height = 1.75           # float(双精度浮点数)
is_student = False      # bool(True / False)
scores = [85, 92, 78]   # list(有序、可变)
info = {"name": "Bob", "age": 25}  # dict(键值对,无序)
```

✅ **注意**:
- 变量命名:小写字母 + 下划线(`snake_case`),如 `user_name`
- 字符串支持单引号、双引号、三引号(多行)

### 2. 控制结构

```python
# 条件语句
if age < 18:
    print("未成年")
elif age < 60:
    print("成年人")
else:
    print("老年人")

# for 循环(迭代器协议是 Python 的灵魂!)
for i in range(5):          # → 0, 1, 2, 3, 4
    print(i)

fruits = ["apple", "banana", "cherry"]
for idx, fruit in enumerate(fruits):
    print(f"{idx}: {fruit}")

# while 循环
count = 0
while count < 3:
    print("Loop", count)
    count += 1
```

---

## 三、核心数据结构详解

| 类型 | 是否可变 | 是否有序 | 典型用途 |
|------|----------|----------|---------|
| `list` | ✅ | ✅ | 动态数组,通用容器 |
| `tuple` | ❌ | ✅ | 不可变序列,常用于函数返回多值 |
| `set` | ✅ | ❌ | 去重、集合运算(交/并/差) |
| `dict` | ✅ | ✅(Python 3.7+ 保证插入顺序) | 映射关系(哈希表实现) |

### 📌 实用技巧
```python
# 列表推导式(List Comprehension)—— Pythonic 写法
squares = [x**2 for x in range(10) if x % 2 == 0]
# → [0, 4, 16, 36, 64]

# 字典合并(Python 3.9+)
d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
merged = d1 | d2  # → {"a": 1, "b": 3, "c": 4}

# 集合操作
A = {1, 2, 3}
B = {2, 3, 4}
print(A & B)  # 交集 → {2, 3}
print(A - B)  # 差集 → {1}
```

---

## 四、函数与模块化

### 1. 函数定义与参数

```python
def greet(name: str, greeting: str = "Hello") -> str:
    """函数文档字符串:描述功能、参数、返回值"""
    return f"{greeting}, {name}!"

# 调用
print(greet("Alice"))            # → "Hello, Alice!"
print(greet("Bob", "Hi"))        # → "Hi, Bob!"
```

📌 **参数类型灵活**:
- 位置参数(positional)
- 默认参数(default)
- 关键字参数(keyword-only,`*`, `*args`, `**kwargs`)

```python
def flexible(a, b=1, *, c, d=2, **kwargs):
    pass

flexible(10, c=3, extra="info")  # 合法
# flexible(10, 20, 30)  # 报错:c 必须关键字传参
```

### 2. 模块与包管理

- `import math` → 导入整个模块  
- `from math import sqrt` → 导入特定对象  
- `import package.module as pm` → 别名简化

📦 项目结构示例:
```
my_project/
├── main.py
├── utils/
│   ├── __init__.py   # 使 utils 成为包
│   └── helpers.py
└── requirements.txt  # 依赖列表(pip freeze > requirements.txt)
```

---

## 五、面向对象编程(OOP)

Python 中**一切皆对象**,类是创建对象的蓝图。

```python
class Person:
    species = "Homo sapiens"  # 类属性(所有实例共享)

    def __init__(self, name: str, age: int):
        self.name = name      # 实例属性
        self._age = age       # 约定:_ 开头表示“受保护”(非强制)

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

    def introduce(self):
        return f"Hi, I'm {self.name}, {self.age} years old."

# 继承示例
class Student(Person):
    def __init__(self, name, age, student_id):
        super().__init__(name, age)
        self.student_id = student_id

    def introduce(self):  # 方法重写
        return super().introduce() + f" My ID: {self.student_id}"
```

💡 **关键概念**:
- `__init__`:构造方法
- `self`:指向当前实例(类似 Java 的 `this`)
- `@property`:将方法伪装成属性,支持封装与验证
- `super()`:调用父类方法

---

## 六、异常处理与调试

```python
try:
    result = 10 / 0
except ZeroDivisionError as e:
    print(f"错误:{e}")
except (ValueError, TypeError) as e:
    print("其他错误")
else:
    print("无异常时执行")
finally:
    print("无论如何都执行(如关闭文件)")
```

🔧 **调试技巧**:
- `print()` 快速定位
- `logging` 模块(比 `print` 更规范)
- `pdb`(Python Debugger):`import pdb; pdb.set_trace()`
- IDE 断点调试(VS Code / PyCharm 推荐)

---

## 七、常用标准库推荐

| 模块 | 用途 |
|------|------|
| `os` / `pathlib` | 文件与路径操作(推荐 `pathlib`,更面向对象) |
| `json` | JSON 编码/解码 |
| `datetime` | 日期时间处理(注意 `datetime` vs `date` vs `time`) |
| `re` | 正则表达式 |
| `collections` | `namedtuple`, `defaultdict`, `Counter` 等增强容器 |
| `itertools` | 高效迭代器工具(`chain`, `groupby`, `product`) |
| `functools` | 高阶函数工具(`lru_cache`, `partial`, `reduce`) |

```python
from collections import Counter
words = ["apple", "banana", "apple", "cherry"]
cnt = Counter(words)
print(cnt.most_common(2))  # → [('apple', 2), ('banana', 1)]
```

---

## 八、虚拟环境与依赖管理(必备技能!)

避免全局包污染,强烈建议为每个项目创建独立环境:

```bash
# 创建虚拟环境(Python 3.3+ 内置 venv)
python -m venv .venv

# 激活(Windows)
.venv\Scripts\activate
# 激活(macOS/Linux)
source .venv/bin/activate

# 安装依赖
pip install requests numpy pandas

# 导出依赖
pip freeze > requirements.txt
```

> ✅ 提示:在 `.gitignore` 中加入 `.venv/`,勿提交虚拟环境!

---

## 九、Pythonic 编程风格建议

1. **遵循 PEP 8**:官方代码风格指南  
   - 缩进:4 空格(非 Tab)  
   - 行长 ≤ 79 字符  
   - 函数/变量:`snake_case`;类名:`PascalCase`

2. **善用内置函数**:`len()`, `range()`, `map()`, `filter()`, `zip()`, `all()`, `any()`

3. **避免重复代码**:DRY(Don’t Repeat Yourself)原则

4. **写文档字符串(docstring)**:用 `"""` 描述模块/类/函数用途

5. **类型提示(Type Hints)**:提升可读性与 IDE 支持(Python 3.5+)
   ```python
   def add(a: int, b: int) -> int:
       return a + b
   ```

---

## 十、学习资源推荐

- 📘 官方文档:[docs.python.org](https://docs.python.org/3/)
- 📺 视频教程:Corey Schafer(YouTube)、莫烦 Python(B站)
- 📚 书籍:《Python Crash Course》《流畅的Python》(Luciano Ramalho)
- 🧪 在线练习:LeetCode(简单题起步)、Codewars、Exercism
- 🐙 GitHub Trending:关注热门 Python 项目(如 FastAPI, LangChain)

---

> 🌟 **结语**:Python 的魅力在于其“简单而不简陋”。掌握基础后,可向 Web 开发(Django / Flask)、数据分析(pandas / NumPy)、人工智能(PyTorch / TensorFlow)、自动化脚本等方向深入。保持动手实践,代码即是最好的笔记。