0

まず、SO がこの質問の正しい場所かどうかわからないので、必要に応じてより適切な場所に自由に移動してください。

cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe() ))[0]))

このコード行があります。Python PEP 8 ドキュメントでは、小さな画面での読みやすさを維持するために、行を 79 文字に制限することを推奨しています。

PEP の推奨事項に適合するようにこのコード行をスタイルする最もエレガントな方法は何ですか?

cmd_folder = os.path.realpath(os.path.abspath(os.path.split
                               (inspect.getfile
                                 ( inspect.currentframe() ))[0]))

これは最も適切な方法ですか?私が考えたことのないより良い方法はありますか?

4

4 に答える 4

5

サンプルコードの場合、コードを読みにくくするのではなく、個々の操作に分割する方が適切だと思います。

aFile = inspect.getfile(inspect.currentframe())
cmd_folder = os.path.realpath(os.path.abspath(os.path.split(aFile)[0]))

これらすべての括弧の開始と終了を追跡して、各一時変数で何が起こっているかを把握するのは、それほど面倒なことではありません。変数名は、結果の意図/タイプに名前を付けることで、明確にするのに役立ちます。

ネストされた呼び出しが 2 つ、場合によっては 3 つの場合、1 回の呼び出しで改行の操作を実行する可能性がありますが、括弧が大量にあり、その間にリストのインデックス作成が押しつぶされている場合は絶対にそうではありません。foo.bar().biz().baz()しかし、通常は、左から右に流れるため、連鎖呼び出しでそれを行う傾向があります。

貧弱な無作為の開発者が明日あなたのコードを読まなければならないことを常に想定してください。

于 2012-08-18T05:41:16.947 に答える
4

私は一般的にjdiによって提供された答えを持っています(いくつかの式に分割されています)。しかし、私はこの問題の別の側面を示したいと思います。

一般に、この行を適切に分割してインデントしようとする場合は、インデントに関するPEP8の規則にも従う必要があります。

インデントレベルごとに4つのスペースを使用します。

混乱させたくない本当に古いコードの場合は、引き続き8スペースタブを使用できます。

継続行は、括弧、角かっこ、中括弧の内側を結ぶPythonの暗黙の線を使用するか、ぶら下げインデントを使用して、ラップされた要素を垂直に揃える必要があります。ぶら下げインデントを使用する場合は、次の考慮事項を適用する必要があります。最初の行には引数を入れないでください。さらにインデントを使用して、継続行として明確に区別する必要があります。

[いくつかの例が続きます]

したがって、あなたの場合は次のようになります。

#---------------------------------------------------------79th-column-mark--->|
cmd_folder = os.path.realpath(
    os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0]))

しかし、冒頭で述べたように、そしてPEP20(Pythonの禅)が述べているように:

フラットはネストよりも優れています。

スパースはデンスよりも優れています。

読みやすさが重要です。

したがって、jdiが指摘しているように、コードをいくつかの式に確実に分割する必要があります。

于 2012-08-18T05:58:44.520 に答える
1

私は次のようにする傾向があります:

cmd_folder = os.path.realpath(os.path.abspath(os.path.split(
    inspect.getfile(inspect.currentframe()))[0]))

最初の行の終わりの開きかっこ、および継続行のインデント。最終的には、より審美的だと思うものに行き着きます。

次のように、計算の一部を実行して結果を変数に保存することも恥ずかしいことではありません。

f = inspect.getfile(inspect.currentframe())
cmd_folder = os.path.realpath(os.path.abspath(os.path.split(f)[0]))
于 2012-08-18T05:45:49.747 に答える
0

あなたが本当にそれを1つの表現に留めることを主張するなら、それが実際に見栄えが良いという理由だけで、私は「極端」に行きます:

cmd_folder = os.path.realpath(
    os.path.abspath(
        os.path.split(
            inspect.getfile(
                inspect.currentframe()
        ))[0]
))
于 2012-08-18T12:20:44.090 に答える