1. Python基础语法快速回顾
Python作为一门简洁优雅的编程语言,其基础语法设计非常直观。让我们先快速回顾几个核心语法点,这对后续的深入学习至关重要。
1.1 变量与数据类型
Python是动态类型语言,声明变量时无需指定类型。基本数据类型包括:
- 整型(int):如
age = 25 - 浮点型(float):如
price = 19.99 - 字符串(str):如
name = "Alice" - 布尔型(bool):如
is_valid = True
Python的变量命名遵循以下规则:
- 可以包含字母、数字和下划线
- 不能以数字开头
- 区分大小写
- 避免使用Python关键字(如if, while等)
提示:使用下划线命名法(snake_case)是Python社区的惯例,如
user_name而非userName
1.2 运算符与表达式
Python支持常见的算术运算符:
python复制# 基本算术运算
print(10 + 3) # 加法 13
print(10 - 3) # 减法 7
print(10 * 3) # 乘法 30
print(10 / 3) # 除法 3.333...
print(10 // 3) # 整除 3
print(10 % 3) # 取模 1
print(10 ** 3) # 幂运算 1000
比较运算符用于条件判断:
python复制a = 5
b = 10
print(a == b) # False
print(a != b) # True
print(a > b) # False
print(a <= b) # True
逻辑运算符包括and、or和not:
python复制x = True
y = False
print(x and y) # False
print(x or y) # True
print(not x) # False
2. Python控制结构详解
控制结构是编程中的核心概念,决定了程序的执行流程。Python提供了多种控制结构来实现不同的逻辑。
2.1 条件语句(if-elif-else)
Python中的条件语句用于基于不同条件执行不同代码块。基本语法如下:
python复制age = 18
if age < 13:
print("儿童")
elif age < 18:
print("青少年")
else:
print("成人")
条件表达式(三元运算符)是if-else的简洁形式:
python复制# 常规写法
if x > y:
max_val = x
else:
max_val = y
# 三元运算符写法
max_val = x if x > y else y
2.2 循环语句
Python提供了两种主要的循环结构:for循环和while循环。
for循环通常用于遍历序列:
python复制# 遍历列表
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
print(fruit)
# 使用range()生成数字序列
for i in range(5): # 0到4
print(i)
while循环在条件为真时重复执行代码块:
python复制count = 0
while count < 5:
print(count)
count += 1
循环控制语句:
break:立即退出整个循环continue:跳过当前迭代,继续下一次循环else:循环正常结束时执行(非break退出时)
python复制# break示例
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(f"{n} equals {x} * {n//x}")
break
else:
print(f"{n} is a prime number")
3. Python函数与模块
函数是组织代码的基本单元,模块则是组织函数和变量的更高层次结构。
3.1 函数定义与调用
定义函数使用def关键字:
python复制def greet(name):
"""返回问候语"""
return f"Hello, {name}!"
print(greet("Alice")) # 调用函数
函数参数可以有默认值:
python复制def power(base, exponent=2):
return base ** exponent
print(power(3)) # 9 (使用默认exponent=2)
print(power(3, 3)) # 27
可变参数:
python复制# *args接收任意数量的位置参数
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3)) # 6
# **kwargs接收任意数量的关键字参数
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=25)
3.2 模块与导入
模块是包含Python定义和语句的文件。使用import导入模块:
python复制# 导入整个模块
import math
print(math.sqrt(16)) # 4.0
# 导入特定函数
from math import sqrt, pi
print(sqrt(25)) # 5.0
# 给模块起别名
import numpy as np
创建自己的模块:
- 创建一个.py文件,如
mymodule.py - 在文件中定义函数和变量
- 在其他文件中使用
import mymodule导入
4. Python数据结构进阶
Python提供了丰富的数据结构来处理各种数据组织需求。
4.1 列表(List)
列表是Python中最常用的可变序列类型:
python复制numbers = [1, 2, 3, 4, 5]
# 常用操作
numbers.append(6) # 添加元素
numbers.insert(0, 0) # 在索引0处插入0
numbers.remove(3) # 删除第一个出现的3
popped = numbers.pop() # 移除并返回最后一个元素
列表推导式(List Comprehension):
python复制# 生成平方数列表
squares = [x**2 for x in range(10)]
# 带条件的列表推导式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
4.2 字典(Dictionary)
字典存储键值对,查找效率高:
python复制person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 访问和修改
print(person["name"]) # Alice
person["age"] = 26 # 更新值
person["email"] = "alice@example.com" # 添加新键值对
# 常用方法
keys = person.keys() # 获取所有键
values = person.values() # 获取所有值
items = person.items() # 获取所有键值对
字典推导式:
python复制# 创建数字到其平方的映射
square_dict = {x: x*x for x in range(5)}
4.3 集合(Set)
集合是无序且不重复的元素集合:
python复制primes = {2, 3, 5, 7}
# 集合操作
primes.add(11) # 添加元素
primes.remove(2) # 移除元素
print(3 in primes) # 成员测试 True
# 集合运算
a = {1, 2, 3}
b = {2, 3, 4}
print(a | b) # 并集 {1, 2, 3, 4}
print(a & b) # 交集 {2, 3}
print(a - b) # 差集 {1}
5. Python面向对象编程
Python完全支持面向对象编程,包括封装、继承和多态。
5.1 类与对象
定义类使用class关键字:
python复制class Dog:
# 类属性
species = "Canis familiaris"
# 初始化方法
def __init__(self, name, age):
self.name = name # 实例属性
self.age = age
# 实例方法
def description(self):
return f"{self.name} is {self.age} years old"
def speak(self, sound):
return f"{self.name} says {sound}"
# 创建实例
buddy = Dog("Buddy", 9)
print(buddy.description()) # Buddy is 9 years old
print(buddy.speak("Woof")) # Buddy says Woof
5.2 继承与多态
继承允许我们定义一个新类来继承现有类的属性和方法:
python复制class Bulldog(Dog): # 继承Dog类
def speak(self, sound="Woof Woof"):
return super().speak(sound) # 调用父类方法
jack = Bulldog("Jack", 3)
print(jack.speak()) # Jack says Woof Woof
多态允许不同类的对象对同一方法调用做出不同响应:
python复制class Cat:
def __init__(self, name, age):
self.name = name
self.age = age
def speak(self):
return "Meow"
# 多态示例
def pet_speak(pet):
print(pet.speak())
dog = Dog("Buddy", 5)
cat = Cat("Kitty", 3)
pet_speak(dog) # Buddy says Woof
pet_speak(cat) # Meow
6. Python异常处理
良好的异常处理可以使程序更健壮,避免意外崩溃。
6.1 try-except语句
基本异常处理结构:
python复制try:
# 可能引发异常的代码
result = 10 / 0
except ZeroDivisionError:
# 处理特定异常
print("不能除以零!")
except (TypeError, ValueError):
# 处理多种异常
print("类型或值错误")
except Exception as e:
# 处理所有其他异常
print(f"发生错误: {e}")
else:
# 没有异常时执行
print("计算成功")
finally:
# 无论是否发生异常都会执行
print("执行清理工作")
6.2 自定义异常
可以创建自己的异常类型:
python复制class InvalidAgeError(Exception):
"""年龄无效异常"""
pass
def register_user(age):
if age < 0:
raise InvalidAgeError("年龄不能为负")
elif age < 18:
raise InvalidAgeError("未满18岁不能注册")
else:
print("注册成功")
try:
register_user(-5)
except InvalidAgeError as e:
print(f"注册失败: {e}")
7. Python文件操作
Python提供了简单易用的文件操作接口。
7.1 读写文件
基本文件操作:
python复制# 写入文件
with open("example.txt", "w") as f:
f.write("Hello, World!\n")
f.write("这是第二行\n")
# 读取文件
with open("example.txt", "r") as f:
content = f.read() # 读取全部内容
print(content)
# 逐行读取
with open("example.txt", "r") as f:
for line in f:
print(line.strip()) # 去除行尾换行符
7.2 CSV和JSON处理
处理常见数据格式:
python复制import csv
import json
# 写入CSV
with open("data.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["Name", "Age", "City"])
writer.writerow(["Alice", 25, "New York"])
writer.writerow(["Bob", 30, "Chicago"])
# 读取CSV
with open("data.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
print(row)
# JSON处理
data = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 写入JSON
with open("data.json", "w") as f:
json.dump(data, f)
# 读取JSON
with open("data.json", "r") as f:
loaded_data = json.load(f)
print(loaded_data)
8. Python高级特性
掌握这些高级特性可以让你的代码更加Pythonic。
8.1 生成器与迭代器
生成器是一种特殊的迭代器,可以节省内存:
python复制# 生成器函数
def countdown(n):
while n > 0:
yield n
n -= 1
# 使用生成器
for i in countdown(5):
print(i) # 打印5,4,3,2,1
# 生成器表达式
squares = (x*x for x in range(10))
for num in squares:
print(num)
8.2 装饰器
装饰器用于修改或扩展函数的行为:
python复制# 简单的装饰器
def my_decorator(func):
def wrapper():
print("函数执行前")
func()
print("函数执行后")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# 输出:
# 函数执行前
# Hello!
# 函数执行后
带参数的装饰器:
python复制def repeat(num_times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(num_times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(num_times=3)
def greet(name):
print(f"Hello {name}")
greet("Alice")
# 输出:
# Hello Alice
# Hello Alice
# Hello Alice
8.3 上下文管理器
上下文管理器用于资源管理,通常与with语句一起使用:
python复制# 基于类的上下文管理器
class FileManager:
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
def __enter__(self):
self.file = open(self.filename, self.mode)
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
# 使用上下文管理器
with FileManager("test.txt", "w") as f:
f.write("Test content")
# 使用contextlib创建上下文管理器
from contextlib import contextmanager
@contextmanager
def open_file(filename, mode):
f = open(filename, mode)
try:
yield f
finally:
f.close()
with open_file("test.txt", "r") as f:
content = f.read()
9. Python标准库常用模块
Python标准库提供了丰富的模块,无需安装即可使用。
9.1 os和sys模块
操作系统相关功能:
python复制import os
import sys
# 文件和目录操作
print(os.getcwd()) # 当前工作目录
os.mkdir("new_dir") # 创建目录
os.rename("old.txt", "new.txt") # 重命名文件
# 系统相关
print(sys.platform) # 操作系统平台
print(sys.argv) # 命令行参数
sys.exit(1) # 退出程序
9.2 datetime和time模块
日期和时间处理:
python复制from datetime import datetime, timedelta
import time
# 当前时间
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S")) # 格式化输出
# 时间计算
tomorrow = now + timedelta(days=1)
print(tomorrow)
# 时间戳
timestamp = time.time() # 当前时间戳
print(timestamp)
time.sleep(1) # 暂停1秒
9.3 collections模块
提供额外的数据结构:
python复制from collections import defaultdict, Counter, namedtuple
# defaultdict自动初始化字典值
word_counts = defaultdict(int)
for word in ["apple", "banana", "apple"]:
word_counts[word] += 1
print(word_counts) # {'apple': 2, 'banana': 1}
# Counter计数
counts = Counter("abracadabra")
print(counts) # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
# namedtuple创建简单类
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(p.x, p.y) # 10 20
10. Python开发环境配置
良好的开发环境能显著提高编码效率。
10.1 安装Python
从官网下载安装Python:
- 访问Python官网
- 下载适合你操作系统的最新版本
- 运行安装程序,勾选"Add Python to PATH"选项
- 完成安装后,在命令行输入
python --version验证安装
提示:在Windows上,可以使用
py命令来管理多个Python版本,如py -3.9启动Python 3.9
10.2 虚拟环境管理
虚拟环境可以隔离项目依赖:
bash复制# 创建虚拟环境
python -m venv myenv
# 激活虚拟环境
# Windows:
myenv\Scripts\activate
# Unix/macOS:
source myenv/bin/activate
# 停用虚拟环境
deactivate
10.3 常用开发工具
-
VS Code:轻量级但功能强大的编辑器
- 安装Python扩展
- 配置Python解释器路径
- 使用集成终端运行代码
-
PyCharm:专业的Python IDE
- 提供智能代码补全
- 内置调试器和测试工具
- 支持Django等框架
-
Jupyter Notebook:交互式编程环境
- 适合数据分析和教学
- 支持Markdown和可视化
11. Python项目结构与打包
良好的项目结构有助于代码维护和团队协作。
11.1 典型项目结构
一个规范的Python项目通常如下组织:
code复制my_project/
├── docs/ # 文档
├── my_project/ # 项目源代码
│ ├── __init__.py # 包初始化文件
│ ├── module1.py # 模块1
│ └── module2.py # 模块2
├── tests/ # 测试代码
│ ├── __init__.py
│ ├── test_module1.py
│ └── test_module2.py
├── requirements.txt # 依赖列表
├── setup.py # 打包配置
└── README.md # 项目说明
11.2 使用setup.py打包
创建setup.py文件:
python复制from setuptools import setup, find_packages
setup(
name="my_project",
version="0.1",
packages=find_packages(),
install_requires=[
"requests>=2.25.1",
"numpy>=1.20.0",
],
entry_points={
"console_scripts": [
"my_command=my_project.module1:main",
],
},
)
构建和安装包:
bash复制# 构建分发包
python setup.py sdist bdist_wheel
# 安装本地包
pip install -e .
# 上传到PyPI
twine upload dist/*
12. Python测试与调试
编写测试是保证代码质量的重要手段。
12.1 unittest框架
Python内置的测试框架:
python复制import unittest
def add(a, b):
return a + b
class TestAdd(unittest.TestCase):
def test_add_positive(self):
self.assertEqual(add(2, 3), 5)
def test_add_negative(self):
self.assertEqual(add(-1, -1), -2)
def test_add_zero(self):
self.assertEqual(add(0, 0), 0)
if __name__ == "__main__":
unittest.main()
运行测试:
bash复制python -m unittest test_module.py
12.2 pytest框架
更强大的第三方测试框架:
python复制# test_sample.py
def func(x):
return x + 1
def test_answer():
assert func(3) == 4
运行测试:
bash复制pytest test_sample.py
pytest提供许多有用功能:
- 自动发现测试
- 丰富的断言内省
- 夹具(fixture)系统
- 参数化测试
12.3 调试技巧
使用pdb进行调试:
python复制import pdb
def problematic_function():
x = 1
pdb.set_trace() # 设置断点
y = x / 0
return y
problematic_function()
调试命令:
n(next):执行下一行s(step):进入函数调用c(continue):继续执行直到下一个断点l(list):显示当前代码p(print):打印变量值q(quit):退出调试器
VS Code和PyCharm等IDE提供了图形化的调试界面,可以设置断点、查看变量和单步执行。
13. Python性能优化
编写高效Python代码的几个关键技巧。
13.1 选择合适的数据结构
不同操作的时间复杂度:
- 列表(list):
- 索引:O(1)
- 插入/删除末尾:O(1)
- 插入/删除中间:O(n)
- 集合(set):
- 添加/删除/查找:平均O(1)
- 字典(dict):
- 获取/设置/删除:平均O(1)
使用场景:
- 频繁查找:使用集合或字典
- 有序数据:使用列表
- 唯一性要求:使用集合
13.2 使用内置函数和库
Python内置函数通常是用C实现的,比纯Python代码快得多:
python复制# 较慢的Python循环
result = []
for item in iterable:
result.append(func(item))
# 更快的map函数
result = list(map(func, iterable))
# 最快的列表推导式
result = [func(item) for item in iterable]
13.3 避免不必要的计算
利用惰性求值和生成器:
python复制# 不好的做法:先生成完整列表
sum([x*x for x in range(1000000)])
# 更好的做法:使用生成器表达式
sum(x*x for x in range(1000000))
使用缓存避免重复计算:
python复制from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
13.4 使用多进程处理CPU密集型任务
Python的GIL限制了多线程的并行能力,对于CPU密集型任务,可以使用多进程:
python复制from multiprocessing import Pool
def square(x):
return x * x
if __name__ == "__main__":
with Pool(4) as p:
results = p.map(square, range(10))
print(results) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
14. Python常用第三方库
Python丰富的第三方库生态系统是其强大之处。
14.1 数据处理与分析
-
NumPy:高性能多维数组计算
python复制import numpy as np arr = np.array([1, 2, 3]) print(arr * 2) # [2 4 6] -
Pandas:数据操作与分析
python复制import pandas as pd df = pd.DataFrame({ "Name": ["Alice", "Bob"], "Age": [25, 30] }) print(df.describe()) -
Matplotlib:数据可视化
python复制import matplotlib.pyplot as plt plt.plot([1, 2, 3], [4, 5, 1]) plt.xlabel("X axis") plt.ylabel("Y axis") plt.show()
14.2 Web开发
-
Flask:轻量级Web框架
python复制from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello, World!" if __name__ == "__main__": app.run() -
Django:全功能Web框架
python复制# 创建项目 django-admin startproject mysite # 创建应用 python manage.py startapp polls
14.3 机器学习与AI
-
scikit-learn:机器学习工具包
python复制from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris iris = load_iris() clf = RandomForestClassifier() clf.fit(iris.data, iris.target) -
TensorFlow/PyTorch:深度学习框架
python复制import torch x = torch.tensor([1.0, 2.0]) y = torch.tensor([3.0, 4.0]) print(x + y) # tensor([4., 6.])
15. Python实际项目案例
通过实际项目将所学知识综合应用。
15.1 网页爬虫示例
使用requests和BeautifulSoup抓取网页数据:
python复制import requests
from bs4 import BeautifulSoup
url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 提取所有链接
for link in soup.find_all("a"):
print(link.get("href"))
# 提取特定内容
title = soup.find("h1").text
print(f"页面标题: {title}")
15.2 数据分析示例
使用Pandas分析CSV数据:
python复制import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv("sales_data.csv")
# 基本分析
print(df.describe())
print(df.groupby("product").sum())
# 可视化
df.plot(kind="bar", x="month", y="sales")
plt.title("Monthly Sales")
plt.show()
15.3 Web应用示例
使用Flask创建简单的API:
python复制from flask import Flask, jsonify, request
app = Flask(__name__)
tasks = [
{"id": 1, "title": "Learn Python", "done": False},
{"id": 2, "title": "Build API", "done": False}
]
@app.route("/tasks", methods=["GET"])
def get_tasks():
return jsonify({"tasks": tasks})
@app.route("/tasks", methods=["POST"])
def add_task():
task = {
"id": len(tasks) + 1,
"title": request.json["title"],
"done": False
}
tasks.append(task)
return jsonify(task), 201
if __name__ == "__main__":
app.run(debug=True)
16. Python进阶学习路径
掌握基础后,可以按照以下路径继续深入学习。
16.1 设计模式
Python实现常见设计模式:
- 单例模式
- 工厂模式
- 观察者模式
- 策略模式
示例:观察者模式
python复制class Subject:
def __init__(self):
self._observers = []
def attach(self, observer):
self._observers.append(observer)
def notify(self):
for observer in self._observers:
observer.update(self)
class Observer:
def update(self, subject):
pass
class ConcreteObserver(Observer):
def update(self, subject):
print("Subject状态已更新")
subject = Subject()
observer = ConcreteObserver()
subject.attach(observer)
subject.notify()
16.2 并发编程
- 多线程:
threading模块 - 多进程:
multiprocessing模块 - 异步IO:
asyncio模块
异步编程示例:
python复制import asyncio
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
task1 = asyncio.create_task(say_after(1, "Hello"))
task2 = asyncio.create_task(say_after(2, "World"))
await task1
await task2
asyncio.run(main())
16.3 元编程
Python强大的内省和元编程能力:
python复制# 动态创建类
MyClass = type("MyClass", (), {"x": 42})
# 属性访问控制
class Meta(type):
def __new__(cls, name, bases, dct):
dct["secret"] = 123
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
pass
print(MyClass.secret) # 123
16.4 C扩展开发
使用C扩展提升性能:
- 编写C代码
mymodule.c - 创建
setup.py - 构建并安装扩展
示例setup.py:
python复制from distutils.core import setup, Extension
module = Extension("mymodule", sources=["mymodule.c"])
setup(
name="MyModule",
version="1.0",
ext_modules=[module]
)
构建命令:
bash复制python setup.py build_ext --inplace
17. Python最佳实践
遵循这些实践可以写出更专业、更易维护的Python代码。
17.1 代码风格指南
遵循PEP 8风格指南:
- 缩进:4个空格
- 行长度:不超过79字符
- 导入:分组并按标准库、第三方库、本地库排序
- 命名:
- 变量和函数:小写加下划线
my_variable - 常量:全大写
MAX_SIZE - 类名:驼峰式
MyClass
- 变量和函数:小写加下划线
使用工具检查:
bash复制# 安装flake8
pip install flake8
# 运行检查
flake8 my_script.py
17.2 文档字符串
良好的文档字符串标准:
python复制def calculate_sum(a, b):
"""计算两个数的和
Args:
a (int): 第一个加数
b (int): 第二个加数
Returns:
int: 两个数的和
Examples:
>>> calculate_sum(2, 3)
5
"""
return a + b
使用Sphinx生成文档:
- 安装Sphinx:
pip install sphinx - 初始化文档:
sphinx-quickstart - 配置
conf.py - 生成文档:
make html
17.3 单元测试与持续集成
设置自动化测试:
- 编写测试用例
- 配置
tox.ini支持多环境测试 - 使用GitHub Actions等CI工具
示例.github/workflows/test.yml:
yaml复制name: Python Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10"]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest
- name: Run tests
run: pytest
17.4 性能分析与优化
使用cProfile分析性能:
python复制import cProfile
def slow_function():
total = 0
for i in range(1000000):
total += i
return total
cProfile.run("slow_function()")
优化建议:
- 识别瓶颈:分析热点函数
- 使用更高效的数据结构
- 向量化操作(使用NumPy)
- 考虑使用Cython或Numba加速
- 并行化计算密集型任务
18. Python常见问题与解决方案
总结实际开发中常见的问题及其解决方法。
18.1 导入错误与路径问题
常见错误:
ModuleNotFoundError: No module named 'xxx'ImportError: attempted relative import with no known parent package
解决方案:
-
确保模块在Python路径中:
python复制import sys sys.path.append("/path/to/your/module") -
使用相对导入时确保包结构正确:
code复制my_package/ ├── __init__.py ├── module1.py └── subpackage/ ├── __init__.py └── module2.py在module2.py中:
python复制from ..module1 import some_function -
使用
PYTHONPATH环境变量:bash复制export PYTHONPATH="/path/to/your/project"
18.2 虚拟环境问题
常见问题:
- 激活虚拟环境后仍使用系统Python
- 不同项目间依赖冲突
解决方案:
-
正确创建和激活虚拟环境:
bash复制python -m venv venv source venv/bin/activate # Linux/macOS venv\Scripts\activate # Windows -
使用
requirements.txt管理依赖:bash复制# 生成依赖文件 pip freeze > requirements.txt # 安装依赖 pip install -r requirements.txt -
使用
pipenv或poetry等更高级的工具:bash复制# 使用pipenv pip install pipenv pipenv install requests pipenv shell
18.3 编码问题
常见错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte...- 中文字符显示乱码
解决方案:
-
明确指定文件编码:
python复制with open("file.txt", "r", encoding="utf-8") as f: content = f.read() -
处理不同编码的数据:
python复制text = "中文".encode("gbk") # 编码为GBK decoded = text.decode("gbk") # 解码为Unicode -
在Python文件开头添加编码声明:
python复制# -*- coding: utf-8 -*-
18.4 性能问题
常见表现:
- 循环处理大数据集时速度慢
- 内存占用过高
优化方案:
-
使用生成器代替列表:
python复制# 不好的做法 def get_numbers(n): result = [] for i in range(n): result.append(i) return result # 更好的做法 def get_numbers(n): for i in range(n): yield i -
使用内置函数和库:
python复制# 较慢的循环 result = [] for item in items: result.append(process(item)) # 更快的map result = list(map(process, items)) -
使用NumPy进行数值计算:
python复制import numpy as np # 原生Python
