我是一名Java程序员,但现在因为某些工作需要,进入了“Python领域”。我相信我的很多代码对于Python程序员来说看起来很奇怪(例如,在每个if语句中都使用括号)。
我知道每种语言都有自己的惯例和一套“习惯”。那么,从可读性的角度来看,哪些是Java中应该采用的惯例和做法,但在Python中并不是真正的“Pythonic方式”?
我是一名Java程序员,但现在因为某些工作需要,进入了“Python领域”。我相信我的很多代码对于Python程序员来说看起来很奇怪(例如,在每个if语句中都使用括号)。
我知道每种语言都有自己的惯例和一套“习惯”。那么,从可读性的角度来看,哪些是Java中应该采用的惯例和做法,但在Python中并不是真正的“Pythonic方式”?
对于这个问题,没有简单的答案。让你的代码变得"Pythonic"需要时间。不要试图在Python中重新创建Java习惯用法。学习Python习惯用法需要时间。
看一下像Pythonista一样编写代码:Python习惯用法,Python代码风格指南和Java程序员的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中,Tufte的理念支持我:-
if not something:
this()
that()
theother()
else:
blih()
bluh()
blah()
如果不是...那么就是"很令人费解!交换两部分并去除not
:
if something:
blih()
bluh()
blah()
else:
this()
that()
theother()
else
语句,这常常让我犹豫不决... - detly最好的起点可能是PEP-8,这是官方的Python风格指南。它涵盖了很多被认为是标准的基础知识。
此外,还有一些之前的stackoverflow问题:
语法只是冰山一角。Java程序员应该了解许多不同的语言结构,例如Python不需要使用接口。
在Python中创建接口和可交换实现 - Stack Overflow
另一个非常有用的习惯用法是在Python中可以将所有东西转换为具有直观含义的布尔值。例如,要检查一个空数组,你只需执行
if not my_array:
return
...process my_array...
第一个条件等同于Java的
if ((my_array == null) || (my_array.length == 0)) {
return
}
这在Python中是一个天赐之物。它不仅更加简洁,而且避免了Java的一个陷阱,即许多人不一致地检查两个条件。由此避免了无数的NullPointerException。