Python 代码规范
PEP 8 与最佳实践
为什么需要代码规范?
- 提高可读性
- 便于协作
- 减少错误
- 专业形象
PEP 8 核心规则
1. 命名规范
python
# 好的命名
student_age = 25
total_income = 50000
calculate_mean()
class StudentRecord:
pass
CONSTANT_VALUE = 100
# 不好的命名
s_age = 25 # 太简短
totalIncome = 50 # 驼峰(不是Python风格)
CalculateMean() # 函数用驼峰2. 缩进与空格
python
# 4个空格缩进
def process_data(data):
for item in data:
if item > 0:
print(item)
# 运算符周围空格
x = 5 + 3
income = salary * 1.1
# 逗号后空格
numbers = [1, 2, 3, 4]3. 行长度
python
# 每行不超过79字符
result = some_function(
parameter1,
parameter2,
parameter3
)
# 长字符串换行
message = (
"这是一段很长的文本,"
"为了保持可读性,"
"我们将它分成多行"
)4. 导入顺序
python
# 正确顺序
# 1. 标准库
import os
import sys
from datetime import datetime
# 2. 第三方库
import pandas as pd
import numpy as np
# 3. 自己的模块
from mymodule import myfunction最佳实践
1. 函数文档
python
def calculate_tax(income, rate=0.25):
"""计算税额
Args:
income (float): 年收入
rate (float): 税率,默认0.25
Returns:
float: 应缴税额
Example:
>>> calculate_tax(100000, 0.3)
30000.0
"""
return income * rate2. 异常处理
python
# 具体的异常
try:
df = pd.read_csv('data.csv')
except FileNotFoundError:
print("文件不存在")
except pd.errors.EmptyDataError:
print("文件为空")
# 笼统的异常
try:
df = pd.read_csv('data.csv')
except:
print("出错了")3. 使用列表推导式
python
# 简洁
squares = [x**2 for x in range(10)]
# 冗长
squares = []
for x in range(10):
squares.append(x**2)工具推荐
1. Black(自动格式化)
bash
pip install black
black my_script.py2. Flake8(检查规范)
bash
pip install flake8
flake8 my_script.py3. isort(排序导入)
bash
pip install isort
isort my_script.py实用模板
数据分析脚本模板
python
"""
数据分析脚本模板
Author: Your Name
Date: 2024-01-01
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 常量
DATA_PATH = 'data/raw/survey.csv'
OUTPUT_PATH = 'outputs/'
def load_data(filepath):
"""加载数据"""
return pd.read_csv(filepath)
def clean_data(df):
"""清洗数据"""
df = df.dropna()
df = df[df['age'] > 0]
return df
def analyze(df):
"""分析数据"""
stats = df.describe()
return stats
def main():
"""主函数"""
# 加载
df = load_data(DATA_PATH)
# 清洗
df_clean = clean_data(df)
# 分析
results = analyze(df_clean)
# 保存
results.to_csv(f'{OUTPUT_PATH}results.csv')
if __name__ == '__main__':
main()下一步
下一节:调试与性能分析
继续!