【问题标题】:Extremely long statements in Python?Python 中的语句非常长?
【发布时间】:2019-09-21 05:08:43
【问题描述】:

我正在参加在线 Python 课程。其中一项练习包含:

[print(x, 'has type', type(eval(x))) for x in ['np_vals', 'np_vals_log10', 'df', 'df_log10']]

对我来说,这条长语句的可读性不如标准循环,例如,

for x in ['np_vals', 'np_vals_log10', 'df', 'df_log10'] :
    print(x, 'has type', type(eval(x)))

有没有针对这种事情的推荐做法?

我在 bash 中编写长行以利用管道和替换,这样我就可以使用 vi 输入模式拼凑和编辑整个行——但我这样做是知道为了在脚本中的可读性会以不同的方式编写.

【问题讨论】:

  • 永远不要仅仅为了它的副作用而写一个列表推导——如果你不使用你创建的列表,那你就错了。任何课程中包含的代码与没有大的、fat、“这个代码很糟糕”的免责声明一样可怕,都应该立即放弃。
  • Python 之禅说:“可读性很重要。”。如果您认为它更具可读性,您也可以认为它更好。
  • @Aran-Fey:嗯,我还没有列出理解,也不想偏离课程太远(我知道当我过于分散而不是加强时会发生什么一次一点)。但我发现这门课程对于最终介绍时间序列很有价值。它是由相当大的提供商提供的大量课程的一部分,其中有许多其他好的课程。所以我不想放弃它。
  • 除了列表理解之外,我发现this advicephysical 行不超过 79 个字符,但与语句的长度无关。虽然我猜如果作者把这句话分成两行,那会更好。
  • @Klaus D:这不仅仅是线路的长度。事实上,使用了一种代码模式,它启用了长语句,但没有增加任何价值。在这种情况下,为什么还要使用“向后”循环模式?因为一个可以?展示 Python 功能?我不认为这是展示功能的最佳方式。令人费解。

标签: python readability


【解决方案1】:

Python 有几个广泛使用的样式指南,它们提供了如何处理一般的长行和样式化特定语句的建议,例如您的示例中的列表理解。

Pep8 是大多数人的基准,因为它基于 Python 的创建者的见解。

还有其他具有更多建议的通用风格指南,即Google'sHitchicker's guide to Python。搜索“long line”或您正在寻找样式的特定编程结构应该会产生相关建议。

这些样式指南中的大多数还具有可以自动和/或根据需要强制执行它们的格式化程序,通常具有一定程度的自定义。您可以在here 找到此类格式化程序的一个很好的概述。

【讨论】:

  • 在我原始帖子下的评论中,我引用了 Pep8 的行长,但这似乎并不能证明此处使用列表理解是合理的,并且结果很长。搭便车者指南说“一些复合语句,如列表推导式是允许的,并且因其简洁性而受到赞赏”,但在这种情况下,传统循环的替代方案更简单、更简洁。所以似乎没有理由在这里使用列表推导,而且它的行更长。
  • 风格指南是指导方针,而不是坚定的规则。在我以前的公司中,我们增加了行数限制,因为 89 不再适用于现代分辨率/屏幕(短行的一个原因是为了确保它们不需要滚动)。至于理解-正如您在帖子的第一条评论中提到的-您给出的示例坦率地说是对模式的滥用,这就是为什么它不比循环更好的原因。有些用例是值得的(即towardsdatascience.com/…)。
  • 同意,我认为指南不是规则,而是考虑因素。正如我所提到的,Pep8 指南只提倡简短的身体线条,并没有说明整个语句的长度。原因之一是,即使在今天,您也经常不希望使用单个代码编辑器窗格占据整个宽屏,此外,您可能正在查看多个代码窗口,通常是并排的。我尽量保持文本的物理行数不超过 70 列,因为我总是在不这样做的时候被烧毁。
  • 关于列表理解滥用的评论,特别是关于使用副作用而不是结果列表。我认为这是切线的,因为如果有一些专业人士的话,我可以忽略它。但在这种情况下,除了可读性差之外似乎没有任何收获。您引用的页面指出了列表理解如何不可读,在这种情况下,可以通过将语句分成 2 条物理行来保存可读性。但这比替代的传统循环需要更多的语法,而且在代码模式中这种选择似乎没有任何好处。
  • 这正是重点——我们说一个模式被滥用不是因为某些礼貌规则,而是因为在某些情况下选择它(即仅针对其副作用列出推导)并没有增加清晰度,确切地说因为它不是该模式的正确用法。从技术上讲,许多 python 语句可以在一行中完成,只需添加 ;作为分隔符 - 它是有效的语法,但显然它错过了如何正确减少行的标记。仅为此进行优化可以证明许多错误的样式决策是合理的,这就是样式指南讨论的不仅仅是文件长度的原因;)
猜你喜欢
  • 2021-02-21
  • 2015-10-25
  • 2013-09-09
  • 1970-01-01
  • 2012-04-23
  • 2010-11-18
相关资源
最近更新 更多