类似于管道,上一个函数处理完成的结果交给下一个函数,而不是一个函数套一个函数。

def subtract_federal_tax(df):
    return df * 0.9


def subtract_state_tax(df, rate):
    return df * (1 - rate)


def subtract_national_insurance(df, rate, rate_increase):
    new_rate = rate + rate_increase
    return df * (1 - new_rate)


# 函数一个套一个,阅读性非常差
subtract_national_insurance(
    subtract_state_tax(subtract_federal_tax(df), rate=0.12),
    rate=0.05,
    rate_increase=0.02)

改用 pipe,具体文档查看 pandas.Series.pipe

df.pipe(subtract_federal_tax)
    .pipe(subtract_state_tax, rate=0.12)
    .pipe(subtract_national_insurance, rate=0.05, rate_increase=0.02)

pipe 第一个参数传递函数,第二个参数 *args 为传递函数的参数列表。