该问题听起来完全是愚蠢的,但是由于我对此问题有0条经验,所以我认为值得尝试。
我面临的情况是我有多个功能,每个功能调用一个数据框,然后创建更多数据框以执行某些操作。是的,我可以利用OOP,但是我认为这不会使我的特定情况更具可读性。
下面的代码示例是我制作的一个示例,它可以很有趣地形象化我的意思,它除了说明问题外,没有其他用途。自然,我所面对的情况更加复杂,涉及更多的数据帧,因此为什么不将变量分配给每个分区的数据帧并将其用作函数的参数,这不是一个选择。
dfdata = pd.DataFrame({'Column A': [300,300,450,500,500,750,600,300, 150],'Column B': [1,1,0,1,0,1,0,0,1],'Column C': ['R','C','R','C','Q','C','R','Z','Z']})
def foo1(df):
df_1 = df.loc[df['Column B'] == 1]
df_0 =df.loc[df['Column B'] == 0]
df_x = df_1['Column B']*2
return df_x
def foo2(df):
df_1 = df.loc[df['Column B'] == 1]
df_0 =df.loc[df['Column B'] == 0]
df_y = df_0['Column B']*2
return df_y
def foo3(df):
df_1 = df.loc[df['Column B'] == 1]
df_0 =df.loc[df['Column B'] == 0]
df_z = df_1['Column B']*3
return df_z
因此,总而言之,有什么主意如何在不应用OOP的情况下减少重复性和智能化?
最好在代码中寻找避免或消除重复的方法。实际上,这是编程中一个非常重要的原理,它有一个自己的缩写:DRY(如“ D on't R epeat Y我们自己”)。没错,这与面向对象编程无关。 :)
[尝试摆脱重复时,通常最好的方法是识别重复代码的variable部分。然后尝试编写将这些变量作为参数的函数。例如,((使用您的示例,保留其中没有多大意义的部分):
def foo(df, column_name="Column B", factor=2, filter_value=1):
df_1 = df.loc[df[column_name] == filter_value]
return df_1[column_name] * factor