9

I'm a java programmer, but now entering the "realm of python" for some stuff for which Python works better. I'm quite sure a good portion of my code would look weird for a Python programmer (e.g. using parenthesis on every if).

I know each language has its own conventions and set of "habits". So, from a readability standpoint what are conventions and practices which is "the way to go" in Java, but are not really the "pythonic way" to do stuff?

4

6 に答える 6

8

There's no simple answer to that question. It takes time for your code to be "Pythonic". Don't try and recreate Java idioms in Python. It will just take time to learn Python idioms.

Take a look at Code Like a Pythonista: Idiomatic Python, Style Guide for Python Code and Python for Java Programmers (archived).

于 2010-05-20T00:16:29.063 に答える
5

JacobHallénはかつて、最高のPythonスタイルがタフテの装飾の拒絶に続くことを観察しましたタフテの分野はプログラミング言語ではなく、情報の視覚的表示ですが):「インク」(ピクセル)または「紙」(スペース)を無駄にしないでください単なる装飾。

この原則から多くのことがわかります。冗長な括弧、セミコロン、コメントやdocstring内のばかげた「ASCIIボックス」、異なる行に「整列」するための無駄なスペース、特に二重引用符が必要でない限り一重引用符、続行するための\はありません。必須の場合を除いて、単に言語の規則を読者に思い出させるコメントはありません(読者が問題のある言語を知らない場合;-)など。

「PythonのTufte精神」のこれらの結果のいくつかは、Pythonコミュニティ内で、他の結果よりも物議を醸していることを指摘しておく必要があります。しかし、言語は確かに「タフテの精神」をかなり尊重しています...

「もっと物議を醸す」に移る(ただし、PythonのZenによって認可されている-import thisインタプリタプロンプトで):「フラットはネストよりも優れている」ので、ネストするのではなく「できるだけ早く出てください」。説明させてください:

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

これはひどいことではありませんが、どちらも最適ではありません。「return」は「gets out」なので、ネストを保存できます。

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専用のスタイルではないことは別として、私のペットのおしっこの1つ(どの言語でも、PythonではTufte's Spiritが私をサポートしています;-):

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

「そうでなければ...else」はゆがんでいます!2つの半分を交換し、:を失いnotます

if something:
  blih()
  bluh()
  blah()
else:
  this()
  that()
  theother()
于 2010-05-20T03:23:05.473 に答える
3

The best place to start is probably PEP-8, which is the official Python style guide. It covers a lot of the basics for what is considered standard.

于 2010-05-20T00:18:57.267 に答える
0

「すべてはクラスです」は、特にPythonイディオムではないJavaイディオムです。(ほぼ)すべてがPythonのクラスになる可能性があり、それがより快適な場合はそれを選択しますが、Pythonはそのようなことを必要としません。Pythonは純粋にオブジェクト指向言語ではありません。私の(限られた)経験では、Pythonを心に留めておくのは良いことです。

于 2010-05-20T01:38:01.843 に答える
0

Syntax is only the tip of an iceberg. There are a number of different language construct that Java programmers should be aware of, e.g. Python do not need to use interface

Creating an interface and swappable implementations in python - Stack Overflow

The other really useful idiom is everything can be convert to a boolean value with an intuitive meaning in Python. For example, to check for an empty array, you simply do

if not my_array:
  return
...process my_array...

The first condition is equivalent to Java's

if ((my_array == null) || (my_array.length == 0)) {
  return
}

This is a godsend in Python. Not only is it more concise, it also avoid a Java pitfall where many people do not check for both conditions consistently. Countless NullPointerException are averted as a result.

于 2010-05-20T05:08:50.903 に答える