我有两个函数,每个函数调用第三个函数,但期望返回稍微不同的东西。
所有功能都在单独的文件中。文件A和B不能互相导入,因此功能A和B不能相互调用。组织这个的最佳方法是什么?
我希望避免重复该功能,因为大部分内容都是相同的,以便与DRY原则保持一致。
以下是我所拥有的一些伪代码,以及我认为该程序的结构如何:
#FileA.py
def functionA():
useableData = functionC(rawData)
-
#FileB.py
def functionB():
useableData = functionC(rawData)
-
#FileC.py
def functionC(rawdata):
*Extensive processing/formatting of data*
if C run from A:
return useableData
if C run from B:
*A bit more processing of data*
return useableData
我能想到的唯一解决方案是传递第二个变量和rawdata
,这个字符串表示它来自的函数的名称。但这对我来说似乎不太优雅。
有理想的方法吗?也许不涉及检查调用函数的位置,但仍允许functionC
返回稍有不同的结果,具体取决于数据的返回位置。我可能能够稍微重构代码,但所有三个函数都需要保留在当前文件中。
答案 0 :(得分:3)
我认为你的做法是错误的。我要做的就是这个
def functionA():
useabledata = functionC(rawData)
def functionB():
useabledata = functionD(functionC(rawData))
def functionC(rawData):
*Extensive processing/formatting of data*
def functionD(partiallyProcessedData):
*A bit more processing of data*
其他选项如tobias_k所说,有一个可选的第二个参数
def functionC(rawData, moreProcessing=False):
*Extensive processing*
if not moreProcessing:
return data
*more processing*
return data
并称之为
def functionA()
useabledata = functionC(rawData)
def functionB()
useabledata = functionC(rawData, True)
更加封装的方式是
def functionA():
useabledata = functionC(rawData)
def functionB():
useabledata = functionD(rawData)
def functionC(rawData):
*Extensive processing/formatting of data*
def functionD(rawData):
partialProcessedData = functionC(rawData)
*A bit more processing of data*
答案 1 :(得分:3)
为什么不添加额外的函数参数?
def functionC(rawdata, extra_processing=False):
# extensive processing
if extra_processing:
# more processing
return usable_data
然后在A中将其称为functionC(stuff)
,在B中调用functionC(stuff, extra_processing=True)