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
与其他数据重用(例如生成其他数据的ac()
)。更清楚的是,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
与其他数据一起重用(比如ac()
生成一些其他数据)。更清楚的是,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
获取其输入。第二个版本使它独立。独立是好的。