11

私は Python の初心者で、初めて本格的なオープン ソース プロジェクトを開発したいと考えています。Python プロジェクトの一般的なコーディング スタイルを教えてください。今やってることも載せておきます。

1.- 最も広く使用されている列幅は? (永遠の疑問)
現在、80列に固執しています (そしてそれは苦痛です!)

2.- 使用する引用符は? (私はすべてを見てきましたが、PEP 8 には明確なことは何も記載されていません)
docstring 以外のすべてに単一引用符を使用しています。

3.- インポートはどこに置くのですか?
この順番でファイルヘッダに入れています。

import sys
import -rest of python modules needed-

import whatever
import -rest of application modules-

<code here>

4.-「何でもかんでもインポート」を使用できます?
これを無視する文書をいくつか見ました。

5.- インデント用のタブまたはスペース?
現在 4 つのスペース タブを使用しています。

6.- 変数の命名スタイル? 私はキャメルケースに入れたクラス以外のすべてに小文字を使用しています。

何かお勧めはありますか?

4

3 に答える 3

19

PEP 8は、ほぼすべての一般的なスタイル ガイドの「ルート」です。

Google のPython スタイル ガイドには、非常によく考えられた部分もいくつかありますが、他の部分は独特です (一般的な 4 つのスペースのインデントの代わりに 2 つのスペースのインデントが使用され、camel_case スタイルの代わりに関数とメソッドの CamelCase スタイルがかなり重要です)。特異性)。

あなたの特定の質問に:

1.- 最も広く使用されている列幅は? (永遠の疑問) 現在、80列に固執しています (そしてそれは苦痛です!)

80列が最も人気があります

2.- 使用する引用符は? (私はすべてを見てきましたが、PEP 8 には明確なことは何も記載されていません) docstring 以外のすべてに単一引用符を使用しています。

私はあなたが使用しているスタイルを好みますが、Google でさえこれについてコンセンサスに達することができませんでした:-(

3.- インポートはどこに置くのですか? この順番でファイルヘッダに入れています。

import sys import -残りの python モジュールが必要です-

import any import -残りのアプリケーション モジュール-

はい、優れた選択肢であり、人気もあります。

4.-「何でもかんでもインポート」を使用できますか? これを無視する文書をいくつか見ました。

モジュール内の特定の名前ではなく、常にモジュールをインポートすることを強くお勧めします。これは単なるスタイルではありません。たとえば、それを行う際のテスト容易性など、強力な利点があります。asモジュールの名前を短くしたり、衝突を避けたりするために、句は問題ありません。

5.- インデント用のタブまたはスペース? 現在 4 つのスペース タブを使用しています。

圧倒的に一番人気。

6.- 変数の命名スタイル? 私はキャメルケースに入れたクラス以外のすべてに小文字を使用しています。

ほとんどの人は、クラスの名前の頭文字を大文字にし、定数をすべて大文字にして名前を付けます。

于 2010-05-12T00:11:46.420 に答える
2

1.- 現在、ほとんどの人が 16:9 または 16:10 のモニターを使用しています。たとえ彼らがワイドスクリーンを持っていなくても、彼らはたくさんのピクセルを持っています。 320 X 240。私は通常、長くなりすぎたときに行を終了しますが、これは主観的なものです。私は 23 インチのモニター X 2 で 2048 X 1152 です。

2.- デフォルトでは一重引用符であるため、二重引用符、一重引用符を埋め込む必要がある場合は二重引用符、改行が埋め込まれた文字列の場合は三重引用符をエスケープする必要はありません。

3.-それらをファイルの先頭に置きます。モジュールに対してグローバルに必要ない場合は、メイン関数に入れることがあります。

4.- 一部のモジュールの名前を変更するのは一般的なイディオムです。良い例は次のとおりです。

try:
    # for Python 2.6.x
    import json
except ImportError:
    # for previous Pythons
    try:
        import simplejson as json
    except ImportError:
        sys.exit('easy_install simplejson')

ただし、クラスまたは関数のみをインポートするための推奨される方法は、必要に応じfrom module import xxxてオプションを使用することですas yyy

5.-常にスペースを使用してください!タブがない場合は 2 または 4

6.- クラスは UpperCaseCamelStyle をアップする必要があります。変数は、関数名と同様に、小文字の場合は LowerCamelCase または場合によっては all_lowecase_separated_by_underscores になります。「定数」は ALL_UPPER_CASE_SEPARATED_BY_UNDERSCORES である必要があります

疑問がある場合は、PEP 8、Python ソース、コード ベースの既存の規則を参照してください。しかし、最も重要なことは、可能な限り内部的に一貫性を保つことです。すべての Python コードは、可能な限り同一人物によって記述されたように見える必要があります。

于 2010-05-12T00:18:02.540 に答える
1

私は「スタイリング」に夢中になっているので、約8kのSLOCプロジェクトで現在使用しているガイドラインを書き留めます。ファイルのほとんどはPEP8と一致します。

  1. PEP8は79(WTF?)と言っています、私は80で行き、今はそれに慣れています。結局、目の動きが少なくなります!

  2. '''の複数行にまたがるDocstringsなど。他のすべて''。また、二重引用符は好きではありません。常に一重引用符のみを使用します...これは、JavaScriptコーナーから来たためだと思います。ここでは、''を使用する方が簡単です。そうすれば、すべてをエスケープする必要がないからです。 HTMLのもの:O

  3. 先頭に、カスタムアプリケーションコードの前に組み込まれています。しかし、私は「早期に失敗する」アプローチも採用しているので、バージョンに依存するもの(GTKなど)がある場合は、最初にそれをインポートします。

  4. 場合によっては、ほとんどの場合、importfooとfromfoo importを使用しますが、特定の場合(たとえば、名前は別のインポートによってすでに定義されています)、fooimportbarからblaとしても使用しました。

  5. 4スペース。限目。本当にタブを使用したい場合は、SCMで作業するときにコミットする前に、必ずタブをスペースに変換してください。しかし、決して(!)タブとスペースを混ぜないでください!!! それは恐ろしいバグをもたらす可能性があります。

  6. some_methodまたはfoo_function、CONSTANT、MyClass。

また、メソッド呼び出しなどが複数行にまたがる場合のインデントについて議論したり、使用する行継続スタイルについて議論したりすることもできます。すべてを囲むか()\行の最後で何かを実行します。私は後者を行い、次の行の先頭に演算子やその他のものも配置します。

# always insert a newline after a wrapped one
from bla import foo, test, goo, \
                another_thing

def some_method_thats_too_long_for_80_columns(foo_argument, bar_argument, bla_argument,
                                              baz_argument):

    do_something(test, bla, baz)

    value = 123 * foo + ten \
            - bla

    if test > 20 \
       and x < 4:

        test_something()

    elif foo > 7 \
         and bla == 2 \
         or me == blaaaaaa:

        test_the_megamoth()

また、比較操作のガイドラインがいくつかあります。私は常にis(not)チェックするために使用None True Falseし、暗黙のブール比較を行うことはありません。if foo:常に実行しますif foo is True:。動的型付けは便利ですが、場合によっては、正しいことを確認したいだけです。 !!

私がするもう一つのことは、空の文字列を決して使用しないことです!それらは定数ファイルにあり、コードの残りの部分では、私が好きなものを持っているusername == UNSET_USERNAMEか、label = UNSET_LABELそれはそのようにもっと説明的です!

厳密な空白のガイドラインやその他のクレイジーなものもありますが、それが好きです(クレイジーなので)、コードをチェックするスクリプトも作成しました:http:
//github.com/BonsaiDen/Atarashii/blob/マスター/チェックスタイル

警告(!):それはあなたの気持ちを傷つけるでしょう!JSLintよりもさらに...

しかし、それは私の2セントです。

于 2010-05-12T00:47:43.200 に答える