使功能相互交互的正确方法

我正在编写一个非常基本的应用程序。我可以通过两种方式使其工作:

  1. def a():
        xxxxx
        return data
    
    def b():
        data = a()
        //use data in function
        return yyy
    
    if __name__ == "__main__":
        output = b()
        print(output)
    
  2. def a():
        xxxxx
        return data
    
    def b(data):
        return yyy
    
    if __name__ == "__main__":
        data = a()
        output = b(data)
        print(output)
    

我正在搜索一些有关如何创建函数的良好信息或文档。我上面的两个示例都可以工作,但是如何使函数彼此交互?我认为使用main函数调用几乎每个函数并将其返回那里是不正确的,但是由于函数b完全依赖于{{1},因此第一个示例对我来说似乎有点奇怪},不带参数。

是否有明确的解释或指南?

baobeisl521 回答:使功能相互交互的正确方法

独立性更好-您可以将b与其他数据重用(例如生成其他数据的c())。还更清楚会发生什么-b对您输入的数据进行操作,而不是对a的某些“魔术”连接。

如果您更改了a(),则可能还必须更改b()才能继续使用a()-多数民众赞成在紧密耦合(more...),通常是不希望的。

如果您确实有严格的依赖关系,并且只想为每个函数放置更少的代码,请考虑内部函数:

def getStringOfNumbersTimes2(numbers):
    """Returns a string containing the input numbers multiplicated by 2"""
    def mult2():
        """Mults each number by 2."""
        return [n*2 for n in numbers]

    # create the string - with : in between numbers
    return ' : '.join(map(str,mult2()))

print(getStringOfNumbersTimes2([1,2,3]))
print(getStringOfNumbersTimes2([9.42,8.31,7.2]))

输出:

2 : 4 : 6
18.84 : 16.62  :14.4

这是一个有争议的示例-仅当我永远不需要mult2之外的getStringOfNumbersTimes2并希望getStringOfNumbersTimes2仅输出我给出的两倍时,我才会这样做。

,

所有情况始终取决于您正在使用的用例。

但是,在您上面共享的示例中,我想说第二种选择更好,因为那时方法ab是独立的。

选项2的好处在于,您可以在多种情况下重复使用这些方法,因此b现在只是期望data,即使它来自{{1}或其他将来的方法。来自a的数据也将可以在多个地方使用。

此外,第二个选项使为每个函数单独编写单元测试变得更加容易,并且看起来就像在使用TDD时将要实现的那种实现。

我希望它会有所帮助。

本文链接:https://www.f2er.com/3129130.html

大家都在问