Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据Python中调用函数的位置返回不同的值_Python - Fatal编程技术网

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

根据Python中调用函数的位置返回不同的值,python,Python,我有两个函数,每个函数调用第三个函数,但返回的结果略有不同 所有函数都在单独的文件中。文件A和B不能互相导入,因此函数A和B不能互相调用。最好的组织方式是什么 我希望避免重复该函数,因为它的大部分都是相同的,以符合DRY原则 下面是一些我所拥有的伪代码,以及我对程序结构的看法: #FileA.py def functionA(): useableData = functionC(rawData) - - 我能想到的唯一解决方案是将第二个变量与rawdata一起传递,该字符串表示它来自的

我有两个函数,每个函数调用第三个函数,但返回的结果略有不同

所有函数都在单独的文件中。文件A和B不能互相导入,因此函数A和B不能互相调用。最好的组织方式是什么

我希望避免重复该函数,因为它的大部分都是相同的,以符合DRY原则

下面是一些我所拥有的伪代码,以及我对程序结构的看法:

#FileA.py
def functionA():
    useableData = functionC(rawData)
-

-

我能想到的唯一解决方案是将第二个变量与
rawdata
一起传递,该字符串表示它来自的函数的名称。但这对我来说似乎不雅


有没有一个理想的方法可以做到这一点?可能不涉及检查函数从何处调用,但仍然允许
functionC
根据数据返回的位置返回稍有不同的结果。我可能可以稍微重新构造代码,但这三个函数都需要保留在当前文件中。

我认为您的方法是错误的。我要做的就是这样

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*

我认为你的方法是错误的。我要做的就是这样

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*

为什么不添加一个额外的函数参数呢

def functionC(rawdata, extra_processing=False):
    # extensive processing
    if extra_processing:
        # more processing
    return usable_data

然后在A中调用函数C(stuff),在B中调用函数C(stuff,extra\u processing=True)

为什么不添加一个额外的函数参数呢

def functionC(rawdata, extra_processing=False):
    # extensive processing
    if extra_processing:
        # more processing
    return usable_data

然后在A中你称它为
functionC(stuff)
,在B中你称它为
functionC(stuff,extra\u processing=True)

虽然我认为这是一个可怕的想法,但总有模块。但是,在没有任何附加上下文信息的情况下,根据调用者更改行为是不好的。添加一个额外的参数来指定要执行的处理类型,这是一种不错的形式,尽管只需添加一个(可选)第二个参数
moreProcessing=False
?我建议将特定于fileA所需的任何内容放入function中,并将特定于fileB的任何内容放入functionB中,让functionC只处理两者的共同点。我注意到,几乎任何时候我都想从函数中获得类似但不同的内容,我通常想要一个不同的函数。也许我需要创建两个新函数,并将不常见的行为提取到这些新函数中。。。但我预测你的未来会有痛苦。(尽管蛋糕很棒)您可以让
function
functionB
设置调用时检查的模块级全局值
functionC
。唯一比只向
functionC
传递附加参数更好的情况是,出于某种原因,您可以更改三个函数的实现,但不能更改
functionC
的签名。虽然我认为这是一个可怕的想法,但始终存在模块。但是,在没有任何附加上下文信息的情况下,根据调用者更改行为是不好的。添加一个额外的参数来指定要执行的处理类型,这是一种不错的形式,尽管只需添加一个(可选)第二个参数
moreProcessing=False
?我建议将特定于fileA所需的任何内容放入function中,并将特定于fileB的任何内容放入functionB中,让functionC只处理两者的共同点。我注意到,几乎任何时候我都想从函数中获得类似但不同的内容,我通常想要一个不同的函数。也许我需要创建两个新函数,并将不常见的行为提取到这些新函数中。。。但我预测你的未来会有痛苦。(尽管蛋糕很棒)您可以让
function
functionB
设置调用时检查的模块级全局值
functionC
。如果出于某种原因,您可以更改这三个函数的实现,但不能更改
functionC
的签名,则唯一比只向
functionC
传递附加参数更可取的情况是。这两种方法都是很好的组织方式。我需要给一些想法,以确切地说,我想怎么做,但谢谢!这两种方法都是很好的组织方式。我需要给一些想法,以确切地说,我想怎么做,但谢谢!