168

私は次のコードの行を持っています(命名規則のせいにしないでください、それらは私のものではありません):

subkeyword = Session.query(
    Subkeyword.subkeyword_id, Subkeyword.subkeyword_word
).filter_by(
    subkeyword_company_id=self.e_company_id
).filter_by(
    subkeyword_word=subkeyword_word
).filter_by(
    subkeyword_active=True
).one()

私はそれがどのように見えるか(あまり読みにくい)が好きではありませんが、この状況で行を79文字に制限するより良い考えはありません。それを壊すより良い方法はありますか(できればバックスラッシュなしで)?

4

8 に答える 8

303

追加の括弧を使用できます。

subkeyword = (
    Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word)
    .filter_by(subkeyword_company_id=self.e_company_id)
    .filter_by(subkeyword_word=subkeyword_word)
    .filter_by(subkeyword_active=True)
    .one()
)
于 2011-01-22T16:19:54.553 に答える
68

これは、括弧を開くよりも行継続文字が優先される場合です。このスタイルの必要性は、メソッド名が長くなり、メソッドが引数を取り始めるにつれて、より明白になります。

subkeyword = Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word) \
                    .filter_by(subkeyword_company_id=self.e_company_id)          \
                    .filter_by(subkeyword_word=subkeyword_word)                  \
                    .filter_by(subkeyword_active=True)                           \
                    .one()

PEP 8は、常識の尺度と、実用的で美しいものの両方に目を向けて解釈されることを目的としています。醜いまたは読みにくいコードになるPEP8ガイドラインに喜んで違反します。

そうは言っても、PEP 8と頻繁に対立する場合は、空白の選択を超えた読みやすさの問題があることを示している可能性があります:-)

于 2013-04-09T15:10:46.273 に答える
21

私の個人的な選択は次のとおりです。

サブキーワード=Session.query(
    Subkeyword.subkeyword_id、
    Subkeyword.subkeyword_word、
).filter_by(
    subkeyword_company_id = self.e_company_id、
    subkeyword_word = subkeyword_word、
    subkeyword_active = True、
)。1()
于 2011-01-22T18:26:12.443 に答える
12

中間結果/オブジェクトを保存し、その上で次のメソッドを呼び出すだけです。

q = Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word)
q = q.filter_by(subkeyword_company_id=self.e_company_id)
q = q.filter_by(subkeyword_word=subkeyword_word)
q = q.filter_by(subkeyword_active=True)
subkeyword = q.one()
于 2011-01-22T16:19:48.277 に答える
7

これは他の人が提供するものとは少し異なる解決策ですが、時々気の利いたメタプログラミングにつながるので私のお気に入りです。

base = [Subkeyword.subkeyword_id, Subkeyword_word]
search = {
    'subkeyword_company_id':self.e_company_id,
    'subkeyword_word':subkeyword_word,
    'subkeyword_active':True,
    }
subkeyword = Session.query(*base).filter_by(**search).one()

これは、検索を構築するための優れた手法です。複雑なクエリフォーム(またはユーザーが探しているものに関する文字列ベースの推論)からマイニングする条件のリストを調べてから、辞書をフィルターに分解します。

于 2015-10-02T14:21:25.720 に答える
4

Python言語リファレンスによると
バックスラッシュを使用できます。
または単にそれを壊します。角かっこがペアになっていない場合、Pythonはそれを行として扱いません。そして、そのような状況では、次の行のインデントは重要ではありません。

于 2011-01-22T16:23:38.993 に答える
1

SQLAlchemyを使用しているようですが、trueの場合、sqlalchemy.orm.query.Query.filter_by()メソッドは複数のキーワード引数を取るため、次のように記述できます。

subkeyword = Session.query(Subkeyword.subkeyword_id,
                           Subkeyword.subkeyword_word) \
                    .filter_by(subkeyword_company_id=self.e_company_id,
                               subkeyword_word=subkeyword_word,
                               subkeyword_active=True) \
                    .one()

しかし、それはより良いでしょう:

subkeyword = Session.query(Subkeyword.subkeyword_id,
                           Subkeyword.subkeyword_word)
subkeyword = subkeyword.filter_by(subkeyword_company_id=self.e_company_id,
                                  subkeyword_word=subkeyword_word,
                                  subkeyword_active=True)
subkeuword = subkeyword.one()
于 2011-01-22T16:30:56.390 に答える
1

次のように、引数を2ブロック、ステートメントを1ブロックインデントするのが好きです。

for image_pathname in image_directory.iterdir():
    image = cv2.imread(str(image_pathname))
    input_image = np.resize(
            image, (height, width, 3)
        ).transpose((2,0,1)).reshape(1, 3, height, width)
    net.forward_all(data=input_image)
    segmentation_index = net.blobs[
            'argmax'
        ].data.squeeze().transpose(1,2,0).astype(np.uint8)
    segmentation = np.empty(segmentation_index.shape, dtype=np.uint8)
    cv2.LUT(segmentation_index, label_colours, segmentation)
    prediction_pathname = prediction_directory / image_pathname.name
    cv2.imwrite(str(prediction_pathname), segmentation)
于 2017-03-13T07:40:24.730 に答える