1. Python基础语法精要
Python作为一门简洁优雅的编程语言,其基础语法设计处处体现着"可读性优先"的理念。与其他语言相比,Python最显著的特点就是通过缩进来表示代码块结构,而非传统的大括号。这种设计强制开发者写出格式规范的代码,使得Python程序天生具备良好的可读性。
变量命名是Python编程的基础,遵循以下规则:
- 只能包含字母、数字和下划线
- 不能以数字开头
- 区分大小写
- 避免使用Python关键字(如if, for, while等)
Python支持动态类型,这意味着我们不需要显式声明变量类型。解释器会根据赋值自动推断类型:
python复制count = 10 # 整数
price = 9.99 # 浮点数
name = "Python" # 字符串
is_valid = True # 布尔值
2. 控制流程与循环结构
2.1 条件判断
Python中的条件判断主要通过if语句实现,其基本结构如下:
python复制if condition1:
# 条件1为真时执行
elif condition2:
# 条件2为真时执行
else:
# 其他情况执行
一个实际应用场景是成绩评级系统:
python复制score = 85
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
else:
grade = 'D'
2.2 循环结构
Python提供了两种主要的循环结构:for循环和while循环。
for循环通常用于遍历序列:
python复制fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
print(fruit)
while循环则在条件为真时重复执行代码块:
python复制count = 0
while count < 5:
print(count)
count += 1
循环控制语句:
- break: 立即退出循环
- continue: 跳过当前迭代
- else: 循环正常结束时执行(非break退出)
3. 函数定义与使用
3.1 函数基础
Python中使用def关键字定义函数:
python复制def greet(name):
"""这是一个简单的问候函数"""
return f"Hello, {name}!"
函数调用示例:
python复制message = greet("Alice")
print(message) # 输出: Hello, Alice!
3.2 参数传递
Python支持多种参数传递方式:
- 位置参数:按照参数位置顺序传递
- 关键字参数:通过参数名指定
- 默认参数:定义函数时指定默认值
- 可变参数:*args接收任意数量的位置参数
- 关键字可变参数:**kwargs接收任意数量的关键字参数
示例:
python复制def describe_pet(pet_name, animal_type='dog'):
print(f"I have a {animal_type} named {pet_name}.")
# 使用位置参数
describe_pet('Willie')
# 使用关键字参数
describe_pet(animal_type='hamster', pet_name='Harry')
4. 数据结构深入解析
4.1 列表(List)
列表是Python中最常用的可变序列类型:
python复制numbers = [1, 2, 3, 4, 5]
常用列表操作:
- 添加元素:append(), insert(), extend()
- 删除元素:remove(), pop(), del
- 排序:sort(), sorted()
- 切片:numbers[1:3] → [2, 3]
列表推导式提供了一种简洁的创建列表的方式:
python复制squares = [x**2 for x in range(10)]
4.2 字典(Dictionary)
字典是键值对的集合:
python复制person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
常用字典操作:
- 访问值:person['name']
- 添加/修改:person['job'] = 'Engineer'
- 删除:del person['age']
- 遍历:for key, value in person.items():
字典推导式示例:
python复制square_dict = {x: x*x for x in range(6)}
4.3 元组(Tuple)与集合(Set)
元组是不可变序列:
python复制coordinates = (10, 20)
集合是无序不重复元素集:
python复制unique_numbers = {1, 2, 3, 3, 4} # 结果为{1, 2, 3, 4}
5. 文件操作与异常处理
5.1 文件读写
Python使用open()函数进行文件操作:
python复制# 写入文件
with open('example.txt', 'w') as f:
f.write("Hello, Python!")
# 读取文件
with open('example.txt', 'r') as f:
content = f.read()
文件打开模式:
- 'r': 读取(默认)
- 'w': 写入(会覆盖)
- 'a': 追加
- 'b': 二进制模式
- '+': 读写模式
5.2 异常处理
Python使用try-except块处理异常:
python复制try:
result = 10 / 0
except ZeroDivisionError:
print("不能除以零!")
except Exception as e:
print(f"发生错误: {e}")
else:
print("没有异常发生")
finally:
print("这段代码总会执行")
常见内置异常:
- ValueError: 值错误
- TypeError: 类型错误
- IndexError: 索引越界
- KeyError: 字典键不存在
- FileNotFoundError: 文件未找到
6. 面向对象编程基础
6.1 类与对象
Python是完全面向对象的语言,使用class关键字定义类:
python复制class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name} says woof!")
# 创建实例
my_dog = Dog("Buddy", 3)
my_dog.bark()
6.2 继承与多态
Python支持继承,子类可以继承父类的属性和方法:
python复制class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("子类必须实现此方法")
class Cat(Animal):
def speak(self):
print(f"{self.name} says meow")
class Duck(Animal):
def speak(self):
print(f"{self.name} says quack")
# 多态示例
animals = [Cat("Whiskers"), Duck("Donald")]
for animal in animals:
animal.speak()
7. 模块与包管理
7.1 模块导入
Python模块是一个包含Python定义和语句的文件:
python复制# 导入整个模块
import math
print(math.sqrt(16))
# 导入特定函数
from random import randint
print(randint(1, 10))
# 给模块起别名
import numpy as np
7.2 创建自己的模块
创建一个名为mymodule.py的文件:
python复制def greet(name):
return f"Hello, {name}!"
def add(a, b):
return a + b
在其他文件中使用:
python复制import mymodule
print(mymodule.greet("Alice"))
7.3 包管理
包是包含__init__.py文件的目录,用于组织相关模块:
code复制mypackage/
__init__.py
module1.py
module2.py
subpackage/
__init__.py
module3.py
使用pip管理第三方包:
bash复制pip install package_name
pip install -r requirements.txt
pip freeze > requirements.txt
8. Python标准库精选
8.1 os模块
提供与操作系统交互的功能:
python复制import os
# 获取当前工作目录
print(os.getcwd())
# 列出目录内容
print(os.listdir('.'))
# 创建目录
os.makedirs('new_dir', exist_ok=True)
8.2 datetime模块
处理日期和时间:
python复制from datetime import datetime, timedelta
# 当前时间
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))
# 时间计算
tomorrow = now + timedelta(days=1)
8.3 collections模块
提供特殊容器数据类型:
python复制from collections import defaultdict, Counter
# 默认字典
word_counts = defaultdict(int)
for word in ['apple', 'banana', 'apple']:
word_counts[word] += 1
# 计数器
counts = Counter(['apple', 'banana', 'apple'])
print(counts.most_common(1)) # [('apple', 2)]
8.4 json模块
处理JSON数据:
python复制import json
# Python对象转JSON字符串
data = {'name': 'Alice', 'age': 25}
json_str = json.dumps(data)
# JSON字符串转Python对象
loaded_data = json.loads(json_str)
9. 实用编程技巧
9.1 调试技巧
使用pdb进行调试:
python复制import pdb
def divide(a, b):
pdb.set_trace() # 设置断点
return a / b
result = divide(10, 2)
常用pdb命令:
- n(ext): 执行下一行
- c(ontinue): 继续执行直到下一个断点
- p(rint): 打印变量值
- l(ist): 显示当前代码位置
- q(uit): 退出调试器
9.2 性能优化
列表与生成器表达式对比:
python复制# 列表推导式(立即计算)
squares = [x**2 for x in range(1000000)] # 占用内存
# 生成器表达式(惰性计算)
squares_gen = (x**2 for x in range(1000000)) # 节省内存
使用timeit模块测量代码执行时间:
python复制import timeit
setup = "from math import sqrt"
stmt = "sqrt(2)"
time = timeit.timeit(stmt, setup, number=1000000)
print(f"执行时间: {time:.4f}秒")
9.3 代码风格指南
遵循PEP 8风格指南:
- 缩进:4个空格
- 行长度:不超过79字符
- 导入:分组并按标准库、第三方库、本地库排序
- 命名约定:
- 变量和函数:lower_case_with_underscores
- 常量:UPPER_CASE_WITH_UNDERSCORES
- 类名:CapitalizedWords
使用flake8或pylint进行代码检查:
bash复制pip install flake8
flake8 your_script.py
10. 项目结构与虚拟环境
10.1 典型项目结构
一个良好的Python项目结构示例:
code复制project_name/
│
├── docs/ # 文档
├── project_name/ # 主包
│ ├── __init__.py
│ ├── module1.py
│ └── module2.py
│
├── tests/ # 测试代码
│ ├── __init__.py
│ └── test_module1.py
│
├── requirements.txt # 依赖列表
├── setup.py # 安装脚本
└── README.md # 项目说明
10.2 虚拟环境管理
创建和使用虚拟环境:
bash复制# 创建虚拟环境
python -m venv venv
# 激活虚拟环境(Linux/macOS)
source venv/bin/activate
# 激活虚拟环境(Windows)
venv\Scripts\activate
# 安装依赖
pip install -r requirements.txt
# 退出虚拟环境
deactivate
使用pipenv管理依赖:
bash复制pip install pipenv
pipenv install requests # 安装包
pipenv shell # 进入虚拟环境
pipenv graph # 查看依赖关系
11. 测试驱动开发
11.1 unittest模块
Python内置的测试框架:
python复制import unittest
def add(a, b):
return a + b
class TestAdd(unittest.TestCase):
def test_add_integers(self):
self.assertEqual(add(1, 2), 3)
def test_add_floats(self):
self.assertAlmostEqual(add(1.1, 2.2), 3.3, places=1)
if __name__ == '__main__':
unittest.main()
11.2 pytest框架
更强大的第三方测试框架:
python复制# test_sample.py
def func(x):
return x + 1
def test_answer():
assert func(3) == 4
运行测试:
bash复制pip install pytest
pytest test_sample.py -v
pytest特性:
- 自动发现测试
- 丰富的断言内省
- 夹具(fixture)系统
- 参数化测试
- 插件系统
12. 并发编程基础
12.1 多线程
使用threading模块:
python复制import threading
import time
def worker(num):
print(f"Worker {num} started")
time.sleep(2)
print(f"Worker {num} finished")
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join()
12.2 多进程
使用multiprocessing模块:
python复制from multiprocessing import Process
def worker(num):
print(f"Process {num} started")
time.sleep(2)
print(f"Process {num} finished")
processes = []
for i in range(5):
p = Process(target=worker, args=(i,))
processes.append(p)
p.start()
for p in processes:
p.join()
12.3 异步编程
使用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())
13. 常用第三方库
13.1 requests
HTTP请求库:
python复制import requests
response = requests.get('https://api.github.com')
print(response.status_code)
print(response.json())
13.2 pandas
数据分析库:
python复制import pandas as pd
# 创建DataFrame
data = {'Name': ['Alice', 'Bob'], 'Age': [25, 30]}
df = pd.DataFrame(data)
# 基本操作
print(df.head())
print(df.describe())
13.3 matplotlib
数据可视化:
python复制import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Simple Plot')
plt.show()
13.4 Flask
轻量级Web框架:
python复制from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, Flask!"
if __name__ == '__main__':
app.run(debug=True)
14. Python进阶特性
14.1 装饰器
函数装饰器示例:
python复制def my_decorator(func):
def wrapper():
print("Before function call")
func()
print("After function call")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
14.2 生成器
生成器函数示例:
python复制def countdown(n):
while n > 0:
yield n
n -= 1
for i in countdown(5):
print(i)
14.3 上下文管理器
使用with语句管理资源:
python复制class File:
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 File('example.txt', 'w') as f:
f.write('Hello, context manager!')
14.4 元类
元类控制类的创建:
python复制class Meta(type):
def __new__(cls, name, bases, namespace):
namespace['version'] = 1.0
return super().__new__(cls, name, bases, namespace)
class MyClass(metaclass=Meta):
pass
print(MyClass.version) # 输出: 1.0
15. Python最佳实践
15.1 代码组织
遵循单一职责原则:
- 每个函数只做一件事
- 每个类只负责一个功能
- 每个模块只关注一个主题
使用__main__保护:
python复制def main():
# 主程序逻辑
pass
if __name__ == '__main__':
main()
15.2 错误处理策略
防御性编程原则:
- 尽早失败(fail fast)
- 捕获特定异常而非通用异常
- 提供有意义的错误信息
- 记录错误日志
15.3 性能考量
优化建议:
- 避免不必要的循环
- 使用内置函数和库
- 考虑使用生成器处理大数据
- 缓存计算结果
- 使用适当的数据结构
15.4 文档与注释
编写良好的文档字符串:
python复制def calculate_area(radius):
"""计算圆的面积
Args:
radius (float): 圆的半径,单位米
Returns:
float: 圆的面积,单位平方米
"""
return 3.14159 * radius ** 2
使用Sphinx生成文档:
bash复制pip install sphinx
sphinx-quickstart
