1. ホーム
  2. python

[解決済み] ピトニックとはどういう意味ですか?[クローズド]

2022-03-05 15:53:55

質問

多くのウェブサイトで、コードはpythonicではない、あるいは同じ目標を達成するためにもっとpythonicな方法があるというコメントをよく見かけます。

ここでいうpythonicとは、どういう意味でしょうか?例えば、なぜ

while i < someValue:
   do_something(list[i])
   i += 1

not pythonic while

for x in list:
   doSomething(x)

はピソニックですか?

解決方法は?

Python言語の特徴を生かし、明確で簡潔、かつ保守性の高いコードを生成します。

Pythonicとは、単に構文が正しいだけでなく、Pythonコミュニティの慣習に従い、その言語が意図された方法で使用されているコードという意味です。

これは、他の回答のリンク先の記事のように、否定的な例で説明するのが一番わかりやすいかもしれません。Pythonicでないコードの例は、リスト内包やジェネレータ式のようなPythonのプログラミングパターンを学ぶ代わりに、CやJavaでよく使われるパターンを取り込もうとする他の言語のユーザからよく出ます。ループは特によくある例です。

例えば、Javaの場合、以下のようになります。

for(int index=0; index < items.length; index++) {
     items[index].performAction();
}

Pythonでは、whileループを使用してこれを再現することができますが、次のように使用した方がすっきりします。

for item in items:
  item.perform_action()

あるいは、ジェネレータ式でも

(item.some_attribute for item in items)

つまり、誰かが何かを非パイソン的だと言うとき、彼らはそのコードがパイソンのコーディングスタイルにもっと合うように書き直すことができると言っているのです。

タイピング import this をコマンドラインで実行すると、Pythonの原則の概要が表示されます。あまり知られていませんが、ソースコードに import this は、明らかに、そして意図的に、パイソン的でないのです! 何をすべきでないかの例として、これを見てください。