Python 的“条件函数怎么设置公式”风格强调可读性与简洁性,核心技巧包括:
- 元表达式:
x if condition else y
- 字典映射替代 if-else
- 使用
functools.singledispatch 实现条件分发
基础:三元表达式
grade = "及格" if score >= 60 else "不及格"
注意:Python 没有三元运算符 ?:,必须用 if ... else ... 形式。
字典映射:优雅替代多层 if-elif
【示例】根据月份返回季节:
season_map = {
12: "冬季", 1: "冬季", 2: "冬季",
3: "春季", 4: "春季", 5: "春季",
6: "夏季", 7: "夏季", 8: "夏季",
9: "秋季", 10: "秋季", 11: "秋季"
}
season = season_map.get(month, "未知")
若月份不存在,返回默认值“未知”,避免 KeyError。
高级:使用装饰器封装条件逻辑
当条件复杂时,可用装饰器分离业务逻辑:
from functools import wraps
def validate_positive(func):
@wraps(func)
def wrapper(x):
if x < 0:
raise ValueError("输入必须为非负数")
return func(x)
return wrapper
@validate_positive
def sqrt_safe(x):
import math
return math.sqrt(x)
print(sqrt_safe(9))
print(sqrt_safe(-1))
数据处理:pandas 中的条件函数
在数据分析中,用 np.where 或 pd.Series.map 替代循环:
【示例】对DataFrame列做条件赋值:
import pandas as pd
import numpy as np
df = pd.DataFrame({
"score": [95, 82, 59, 75]
})
df["grade"] = np.where(
df["score"] >= 90, "A",
np.where(df["score"] >= 80, "B",
np.where(df["score"] >= 70, "C", "D"))
)
或更简洁地用 pd.cut 分箱:
df["grade"] = pd.cut(
df["score"],
bins=[0, 70, 80, 90, 100],
labels=["D", "C", "B", "A"],
right=False
)