programing

파이썬에서 연쇄적인 방법을 끊는 방법은 무엇입니까?

javamemo 2023. 6. 24. 08:44
반응형

파이썬에서 연쇄적인 방법을 끊는 방법은 무엇입니까?

다음 코드가 있습니다(이름 지정 규칙에 대해 비난하지 마십시오. 내 것이 코드는 내 코드가 아닙니다.

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자로 제한하는 것이 더 나은 방법이 없습니다.(백슬래시를 사용하지 않는 것이 좋음) 더 좋은 방법이 있습니까?

추가 괄호를 사용할 수 있습니다.

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()
    )

괄호를 여는 것보다 줄 연속 문자가 선호되는 경우입니다.메서드 이름이 길어지고 메서드가 인수를 사용하기 시작하면 이 스타일의 필요성이 더욱 분명해집니다.

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은 상식의 척도이자 실용적이고 아름다운 것을 보는 눈으로 해석됩니다.코드를 읽기 어렵거나 추하게 만드는 PEP 8 지침을 기꺼이 위반합니다.

그렇긴 하지만, 만약 여러분이 PEP 8과 자주 대립하는 것을 발견한다면, 그것은 여러분의 공백 선택을 초월하는 가독성 문제가 있다는 신호일 수 있습니다 :-)

제 개인적인 선택은 다음과 같습니다.

하위 키워드 = 세션.쿼리(하위 키워드.하위 키워드_id,하위 키워드.하위 키워드_word,.filter_by(하위 키워드_company_id=self.e_company_id,하위 키워드_word=하위 키워드_word,하위 키워드_active=진실의,한 가지 일

중간 결과/객체를 저장하고 다음 메소드를 호출합니다.

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()

이것은 다른 사람들이 제공하는 것과는 약간 다른 솔루션이지만 가끔 멋진 메타프로그래밍으로 이어지기 때문에 제가 가장 좋아하는 솔루션입니다.

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()

이것은 검색을 구축하는 데 유용한 기술입니다.복잡한 쿼리 양식(또는 사용자가 찾고 있는 항목에 대한 문자열 기반 추론)에서 마이닝할 조건 목록을 검토한 다음 필터에 사전을 폭발시킵니다.

Python 언어 참조에 따름
백슬래시를 사용할 수 있습니다.
아니면 그냥 깨버리던가요.괄호가 쌍을 이루지 않으면 python은 이를 줄로 처리하지 않습니다.그리고 그러한 상황에서, 다음 라인의 들여쓰기는 중요하지 않습니다.

SQLAlchemy를 사용하는 것 같습니다. 사실이라면 method는 여러 키워드 인수를 사용하므로 다음과 같이 쓸 수 있습니다.

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()

저는 다음과 같이 두 블록으로 인수를 들여쓰기하고 한 블록으로 문장을 들여쓰기를 원합니다.

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)

상위 답변의 약간의 변형: 주요 목적(Session가 맨 위 줄에 유지되고 단일 들여쓰기가 사용됩니다.이를 통해 메인 객체와 이후에 연결된 모든 메서드 호출을 신속하게 식별할 수 있습니다.

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()
)

언급URL : https://stackoverflow.com/questions/4768941/how-to-break-a-line-of-chained-methods-in-python

반응형