5

Python が美しい言語と言われる理由を理解しようとしていました。私は PEP 8 の美しさに導かれました...そしてそれは奇妙でした。実際、一貫性を保つだけで、好きな規則を使用できると書かれています...そして突然、コアライブラリに奇妙なものがいくつか見つかりました。

request()
getresponse()
set_debuglevel()
endheaders()
http://docs.python.org/py3k/library/http.client.html

以下の関数は Python 3.1 で新しく追加されました。ここで使用されている PEP 8 規則のどの部分が使用されていますか?

popitem()
move_to_end()
http://docs.python.org/py3k/library/collections.html

私の質問は、コア ライブラリで PEP 8 が使用されているかどうかです。なぜそうなのですか?
名前の書き方はいろいろあるので、関数の名前を覚えられない PHP と同じような状況はありますか?

なぜPEP 8は新しい関数に対してもコアライブラリで使用されないのですか?

4

3 に答える 3

10

PEP 8 では、アンダースコアをデフォルトの選択肢として使用することを推奨していますが、通常、アンダースコアを省略するのは次の 2 つの理由のいずれかで行われます。

  • 他の API (現在のモジュールや標準インターフェースなど) との一貫性
  • それらを省略しても可読性が損なわれないため (または改善されることさえあります)

あなたが引用する特定の例に対処するには:

  • popitemdictオブジェクトに対する長年のメソッドです。それを採用する他の A​​PI は、そのスペルを保持します (つまり、アンダースコアはありません)。

  • move_to_end完全に新しいです。movetoendアンダースコアを省略したオブジェクトの他のメソッドにもかかわらず、読みにくいため、アンダースコアを使用するという推奨の PEP 8 規則に従います (主にtoeは単語であるため、ほとんどの人の脳は に気付いたらバックアップして再解析する必要がありますnd) 。

  • set_debuglevel(および新しい) は、残りのAPIset_tunnelとの一貫性を保つために、おそらくアンダースコアを除外する必要がありました。HTTPConnectionただし、元の作成者は単純に ( 2 番目のアンダースコアがないことを説明する、コンストラクターへの引数でもあることに注意してください) を好んset_debuglevelだ可能性があり、作成者は単純にその例に従いました。setdebugleveldebuglevelHTTPConnectionset_tunnel

  • set_tunnel実際には、アンダースコアを削除すると読みやすさが損なわれる別のケースです。の 2 つの「t」の並置は、settunnel簡単な解析に役立ちません。

これらの不一致が Python リリース モジュールに組み込まれると、通常、それらを試して修正する手間をかける価値はありません (これはthreading、Python 2 と Python 3 の間のモジュール インターフェイスを非 Java 化するために行われたものであり、そのプロセスは面倒であり、誰もelse は、同様の文体上の問題に悩まされている他の A​​PI を「修正」することを志願しました)。

于 2011-03-01T00:58:59.420 に答える
4

PEP8 から:

しかし、最も重要なことは、いつ矛盾するかを知ることです。スタイル ガイドが適用されない場合もあります。疑わしい場合は、最善の判断を下してください。他の例を見て、何が最適かを判断してください。そして遠慮なく聞いてください!

ここで述べたことは、PEP8 ガイドラインとある程度一致しています。実際、主な不一致は他の部分にあり、通常はキャメルケースにあります。

于 2011-02-28T23:28:23.767 に答える
2

Python 標準ライブラリは、可能な限り厳密に管理されておらず、モジュールのスタイルもさまざまです。あなたの例が何を示しているのかわかりませんが、Java や Win32 のように、Python のライブラリに 1 つの声がないことは事実です。言語 (およびライブラリ) はすべてボランティアのクルーによって構築されており、言語に専念する人々に給与を支払う企業はありません。

もちろん、他の要因がこのマイナスを上回っていると思いますが、それでもマイナスです。

于 2011-02-28T23:23:07.640 に答える