Python 可读性提示给 Java 程序员

9 投票
6 回答
914 浏览
提问于 2025-04-15 22:55

我是一名Java程序员,但现在为了某些事情开始接触Python,因为Python在这些方面表现得更好。我很确定我的代码对Python程序员来说会显得有些奇怪(比如在每个if语句后面都加括号)。

我知道每种编程语言都有自己的习惯和约定。那么,从可读性的角度来看,有哪些在Java中被认为是“正确做法”的习惯,在Python中却不是很“符合Python风格”的呢?

6 个回答

3

最好的起点可能是 PEP-8,这是官方的Python编码风格指南。它涵盖了很多被认为是标准的基本内容。

5

雅各布·哈伦曾经提到,最好的Python风格遵循了塔夫提(Tufte)对装饰的拒绝(虽然塔夫提的领域不是编程语言,而是信息的视觉展示):不要浪费“墨水”(像素)或“纸张”(空间)来做无谓的装饰。

这个原则引申出很多内容:没有多余的括号,没有分号,注释和文档字符串里没有无聊的“ASCII框”,没有浪费空间去“对齐”不同的行,除非特别需要双引号,否则用单引号,不要在必须的情况下才用反斜杠来续行,没有仅仅提醒读者语言规则的注释(如果读者不知道你在用什么语言,那你就麻烦了;-),等等。

我应该指出,这些“塔夫提精神”的后果在Python社区中有些是比较有争议的。但这个语言确实很尊重“塔夫提的精神”...

接下来谈谈“更有争议”的部分(但这是Python之禅所认可的——在解释器提示符下输入import this可以看到): “扁平化比嵌套更好”,所以“尽早退出是明智的”,而不是一层层嵌套。让我来解释一下:

if foo:
  return bar
else:
  baz = fie(fum)
  return baz + blab

这并不是很糟糕,但也不是最优的:因为“return”是“退出”的意思,你可以省去嵌套:

if foo:
  return bar
baz = fie(fum)
return baz + blab

一个更明显的例子:

for item in container:
  if interesting(item):
    dothis(item)
    dothat(item)
    theother(item)

那个大块的双重嵌套看起来不太整齐……考虑一下更扁平的风格:

for item in container:
  if not interesting(item):
    continue
  dothis(item)
  dothat(item)
  theother(item)

顺便说一句,这并不是Python独有的风格——这是我个人的一个小烦恼(在任何语言中都适用,但在Python中,塔夫提的精神支持我;-):

if not something:
  this()
  that()
  theother()
else:
  blih()
  bluh()
  blah()

“if not ... else”是扭曲的!交换这两部分并去掉not

if something:
  blih()
  bluh()
  blah()
else:
  this()
  that()
  theother()
8

这个问题没有简单的答案。让你的代码变得“符合Python风格”是需要时间的。不要试图在Python中模仿Java的写法。学习Python的写法需要一些时间。

你可以看看 像Python高手一样编写代码:Python的写法Python代码风格指南Java程序员的Python指南(存档)

撰写回答