Python 使函数相互作用的正确方法

Python 使函数相互作用的正确方法,python,python-3.x,function,Python,Python 3.x,Function,我正在写一个非常基本的应用程序。我可以通过两种方式使其工作: 我正在搜索一些关于如何创建函数的好信息或文档。我上面的两个例子都有效,但是您应该如何使函数相互作用呢?我认为使用main函数调用几乎所有函数并将其返回到那里是不正确的,但是第一个例子对我来说似乎有点奇怪,因为函数b完全依赖于a,而不带参数 关于如何做到这一点,是否有明确的解释或指南?所有这些都取决于您正在处理的用例 但是,在您上面分享的示例中,我想说第二个选项更好,因为方法a和b是独立的 选项2的好处是,您可以在多个场景中重复使用

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

  • 我正在搜索一些关于如何创建函数的好信息或文档。我上面的两个例子都有效,但是您应该如何使函数相互作用呢?我认为使用
    main
    函数调用几乎所有函数并将其返回到那里是不正确的,但是第一个例子对我来说似乎有点奇怪,因为函数
    b
    完全依赖于
    a
    ,而不带参数


    关于如何做到这一点,是否有明确的解释或指南?

    所有这些都取决于您正在处理的用例

    但是,在您上面分享的示例中,我想说第二个选项更好,因为方法
    a
    b
    是独立的

    选项2的好处是,您可以在多个场景中重复使用这些方法,因此
    b
    现在只需要
    数据
    ,即使它来自
    a
    或其他未来的方法。来自
    a
    的数据也可以在多个地方使用

    此外,第二个选项使得为每个函数单独编写单元测试变得更容易,并且看起来像是在使用TDD的情况下将结束的实现


    我希望有帮助

    所有这些都取决于您正在处理的用例

    但是,在您上面分享的示例中,我想说第二个选项更好,因为方法
    a
    b
    是独立的

    选项2的好处是,您可以在多个场景中重复使用这些方法,因此
    b
    现在只需要
    数据
    ,即使它来自
    a
    或其他未来的方法。来自
    a
    的数据也可以在多个地方使用

    此外,第二个选项使得为每个函数单独编写单元测试变得更容易,并且看起来像是在使用TDD的情况下将结束的实现


    我希望有帮助

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

    如果您更改了
    a()
    ,您可能还必须更改
    b()
    ,以便仍然能够使用
    a()
    -这是紧密耦合(),通常是不可取的

    如果你真的有硬依赖关系,只想减少每个函数的代码,请考虑内部函数:

    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
    

    这是一个有争议的例子-如果我不需要
    getStringOfNumbersTimes2
    之外的
    mult2
    并且希望
    getStringOfNumbersTimes2
    只输出我给出的两倍,我只会这样做。

    独立性更好-您可以将
    b
    与其他数据一起重用(比如a
    c()
    生成一些其他数据)。更清楚的是,
    b
    对您输入的数据进行操作,而不是与
    a
    的“神奇”连接

    如果您更改了
    a()
    ,您可能还必须更改
    b()
    ,以便仍然能够使用
    a()
    -这是紧密耦合(),通常是不可取的

    如果你真的有硬依赖关系,只想减少每个函数的代码,请考虑内部函数:

    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
    

    这是一个有争议的例子-我只会在我不需要
    getStringOfNumbersTimes2
    之外的
    mult2
    并且希望
    getStringOfNumbersTimes2
    只输出我给出的两倍时这样做。

    在第一个例子中,
    b
    被迫从
    a
    获取输入。第二个版本使它独立。独立性很好。在第一个示例中,
    b
    被迫从
    a
    获取其输入。第二个版本使它独立。独立是好的。