缩写几个功能 - 指导方针?

时间:2013-06-12 00:43:12

标签: python function

这可能是一个非常愚蠢的问题,但无论如何我都会问。

有两种方法可以展示此代码:

file = "picture.jpg"
pic = makePicture(file)
show(pic)

show(makePicture("picture.jpg"))

这只是一个如何缩写的例子,我已经看到它与其他功能。但是当我需要这样做时,它总是让我感到困惑。结合这样的功能有没有经验法则?在我看来,你在向前选择函数并以文件或选择文件的函数(即pickAFile())结束。听起来不错吗?

请保持解释简单,聪明的狗可以理解。

4 个答案:

答案 0 :(得分:4)

Chiming in,因为我认为这种风格很重要。如果您不重复使用show(makePicture("picture.jpg"))"picture.jpg",我肯定会选择makePicture(…)。原因是:

  • 这完全易读
  • 这使代码更快阅读无需花费的时间超过其所需的时间)。
  • 如果您使用变量,那么您正在向阅读代码的人发送信号(包括您,在一段时间后)代码中的某些地方重用并且最好将它们放入他们的工作(短期)记忆。 Our short-term memory is limited(在20世纪60年代,实验表明,一次记住大约7条信息,而一些现代实验得出的数字较低)。因此,如果变量未在任何地方重复使用,通常应将其删除,以免污染读者的短期记忆。

我认为你的问题是非常有效的, 肯定不会在这里使用中间变量,除非它们必要(因为它们被重用,或者因为它们有助于破解直接可理解的部分中的复杂表达式)。这种做法将使您的代码更清晰,并会给您良好的习惯。

PS:正如Blender所说,许多嵌套函数调用会使代码难以阅读。如果是这种情况,我建议考虑使用中间变量来保存有意义的信息,这样函数调用就不会包含太多的嵌套级别。

PPS:正如pcurry所指出的,嵌套函数调用也可以很容易地分解为多行,如果它们变得太长,这可以使代码看起来像使用中间变量一样清晰,不使用任何一个的好处:

print_summary(
    energy=solar_panel.energy_produced(time_of_the_day),
    losses=solar_panel.loss_ratio(),
    output_path="/tmp/out.txt"
)

答案 1 :(得分:1)

当你写:

pic = makePicture(file)

您以makePicture作为参数调用file,并将该函数的输出放入变量pic。如果您使用pic所做的一切都将其用作show的参数,那么您根本不需要使用pic。这只是一个临时变量。您的第二个示例就是这样,并将makePicture(file)的输出作为第一个参数直接传递给show,而不使用像pic这样的临时变量。

现在,如果您在其他地方使用pic,那么实际上无法绕过它。如果您不重复使用临时变量,请选择您喜欢的任何方式。只要确保它是可读的。

答案 2 :(得分:1)

这完全取决于程序员,如果您计划制作更大的程序,您可能希望将语句分开,以便您可以返回该文件。

如果您正在与一个程序员团队合作,那么可读性总是很重要,但如果这只是您自己做的事情,那就做最舒适的事情。

答案 3 :(得分:0)

由于其他答案中讨论的原因,

show(makePicture("picture.jpg"))比较长版本更具可读性。我还发现,尝试消除中间变量通常会产生更好的解决方案。但是,在某些情况下,复杂中间结果的描述性命名会使代码更具可读性。