python - 在 Python 中构造函数调用

标签 python unit-testing functional-programming

我不知道如何构造函数调用。我知道“干净代码规则”说函数应该只做一件事,并且应该让它们尽可能小。我也是这么做的。

但我不确定如何调用这些函数。我不知道如何命名这些概念,但我很难在“函数内部调用函数”或“链接/管道函数”之间进行选择。在下面的示例中,我有一个非常基本的示例,但我希望它能让我谈论的概念变得清晰。

“链接/管道”使代码更容易进行单元测试,您不需要模拟函数。但是“调用内部函数”使代码更短并且可能更具可读性。

您如何选择一种方式或另一种方式?

顺便说一句,我很难寻找这些概念之间的差异,如果有人能给我指出一个好的来源 -那就太好了。

# Calling inside a function

def sum_of_squares(numbers):
    return sum([square(num) for num in numbers])

def square(num):
    return num*num

numbers = [2,3,4]
square_sum = sum_of_squares(numbers))

print(square_sum) # prints 29

-----

# Chaining/Piping

def sum_of_squares(squares):
    return sum(squares)

def square(num):
    return num*num

numbers = [2,3,4]
squares = [ square(num) for num in numbers ]
square_sum = sum_of_squares(squares))

print(square_sum) # prints 29

最佳答案

基本上这两种类型的声明都很好并且可用。 您可以根据您想要实现的目标和具体情况选择其中之一。 最重要的方面之一是代码的透明度可读性。 您始终应该在两种类型的声明之间找到权衡

如果您在一个(或几个)函数中编写代码,则代码的主流将非常透明和清晰,但是如果任何人(或只是您自己)需要阅读和解释您的代码,您将有总是跳回函数声明,然后如果您在该函数内有其他函数调用,则继续下去,依此类推,这可能非常不方便,并且很可能在一段时间后您会丢失该行。

另一方面,如果您“链接”大量函数调用,就像您所做的第二种方式一样,那么前面的部分(代码的主流)将会增长,并且在一段时间后会变得不那么透明。我的关键经验法则是始终将真正足以理解您最近的代码的内容放在“前面”,并始终选择一些简单的不言自明的函数命名约定,以便以后能够很好地阅读您的代码。

另一方面,如果您想使用相同的代码序列,您应该在函数中执行它。在这种情况下,您显然会更喜欢第一种方式。

希望对您有帮助。

关于python - 在 Python 中构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53188517/

相关文章:

Python tkinter 仅修改具有焦点的列表框

c++ - 替换 Dll 中的类以进行单元测试

c# - 异步单元测试未按预期工作

Scheme中的图编程

c++ - c++ 模板元编程是函数式编程的一种形式吗

r - 在R中,出现以下错误: "attempt to replicate an object of type ' closure'"

python - 在 Python 中随机排列子列表组

python - 从缩减表中抓取数据

python - 如何将字符串拆分为数字和字符

python-3.x - 何时使用 pytest 固定装置?