【问题标题】:Pycode style E501 line too long (118 > 79 characters)Pycodestyle E501 行太长(118 > 79 个字符)
【发布时间】:2018-09-19 19:30:04
【问题描述】:
charr_prob = float(self.char_freq(kgram, char) * 1.0 / (self.kgram_freq(kgram) * 1.0))

我该如何解决这个问题?

【问题讨论】:

标签: python pycodestyle


【解决方案1】:

如果不影响可读性,长行不一定是坏事。这是一个品味问题。您可以通过添加# noqa 来禁用警告,也可以将行拆分为多个:

例如使用括号:

charr_prob = (float(self.char_freq(kgram, char) * 1.0 
              / (self.kgram_freq(kgram) * 1.0)))

因为float 已经使用了括号:

charr_prob = float(self.char_freq(kgram, char) * 1.0
             / (self.kgram_freq(kgram) * 1.0))

您还可以在第一行的末尾使用\ 将第二行包含在当前表达式中。在这里,为float 定义的括号将是多余的,但假设您删除对float 的调用,它将是:

charr_prob = (self.char_freq(kgram, char) * 1.0) \
             / (self.kgram_freq(kgram) * 1.0)

您还可以尽可能简化表达式。假设您使用的是 Python3(因此 / 不是整数除法):

charr_prob = self.char_freq(kgram, char) / self.kgram_freq(kgram)

或者,对于 Python2(79 个字符!):

charr_prob = float(self.char_freq(kgram, char)) / float(self.kgram_freq(kgram))

或者,正如@Blender 所建议的,甚至:

charr_prob = float(self.char_freq(kgram, char)) / self.kgram_freq(kgram)

...第二个float 是不必要的,因为/ 的第一个操作数已经是一个浮点数。另一种可能是将/的行为从Python3导入到Python2:

from __future__ import division

【讨论】:

  • 为了使其更短,在 Python 2 版本中您不需要多个 float。您也可以使用from __future__ import division 并在这两种情况下都使用 Python 3 版本。
  • 对!谢谢@Blender。我编辑了我的答案以包含您的建议。
  • pycodestyle 似乎将缩进计算为字符也 charr_prob = (float(self.char_freq(kgram, char) * 1.0 仅 53 个字符长。但 pycodestyle 将其计为 87 个字符长,包括缩进
  • 你有 34 个字符只是为了缩进代码?这很多(而不是 4 或 8 的倍数,顺便说一句;-)在这种情况下,一种可能性是将部分代码移动到单独的函数中。另一种可能性是简单地忽略警告,因为 PEP8 只是一个指导方针;)
猜你喜欢
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 2010-09-10
  • 2010-12-24
  • 1970-01-01
相关资源
最近更新 更多