根据Python中调用函数的位置返回不同的值

时间:2016-03-31 19:45:24

标签: python

我有两个函数,每个函数调用第三个函数,但期望返回稍微不同的东西。

所有功能都在单独的文件中。文件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返回稍有不同的结果,具体取决于数据的返回位置。我可能能够稍微重构代码,但所有三个函数都需要保留在当前文件中。

2 个答案:

答案 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)