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