문제

여러 줄로 나누고 싶은 긴 코드 줄이 있습니다.무엇을 사용하고 구문은 무엇입니까?

예를 들어, 여러 문자열을 추가하면

e = 'a' + 'b' + 'c' + 'd'

다음과 같이 두 줄로 작성하십시오.

e = 'a' + 'b' +
    'c' + 'd'
도움이 되었습니까?

해결책

라인은 무엇입니까?아무런 문제 없이 다음 줄에 인수를 입력할 수 있습니다.

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

그렇지 않으면 다음과 같이 할 수 있습니다:

if a == True and \
   b == False

을 체크 해봐 스타일 가이드 자세한 내용은.

귀하의 예제 라인에서 :

a = '1' + '2' + '3' + \
    '4' + '5'

또는:

a = ('1' + '2' + '3' +
    '4' + '5')

스타일 가이드에서는 괄호와 함께 암시적 연속을 사용하는 것이 바람직하다고 나와 있지만 이 특별한 경우에는 표현식 주위에 괄호를 추가하는 것이 아마도 잘못된 방법일 수 있습니다.

다른 팁

에서 Python 코드 스타일 가이드:

긴 줄을 래핑하는 데 선호되는 방법은 괄호, 대괄호 및 중괄호 안에 Python의 암시적 줄 연속을 사용하는 것입니다. 표현식을 괄호로 묶어 긴 줄을 여러 줄로 나눌 수 있습니다.줄 연속을 위해 백슬래시를 사용하는 것보다 우선적으로 사용해야 합니다.

백슬래시는 때때로 적절할 수도 있습니다.예를 들어, 길고 여러 개의 with 문은 암시적 연속을 사용할 수 없으므로 백슬래시가 허용됩니다.

with open('/path/to/some/file/you/want/to/read') as file_1, \
        open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

또 다른 경우는 Assert 문을 사용하는 경우입니다.

이어지는 줄을 적절하게 들여쓰기했는지 확인하세요.이진 연산자를 우회하는 데 선호되는 위치는 다음과 같습니다. ~ 후에 그 이전이 아닌 연산자.몇 가지 예:

class Rectangle(Blob):

    def __init__(self, width, height,
                 color='black', emphasis=None, highlight=0):
        if (width == 0 and height == 0 and
                color == 'red' and emphasis == 'strong' or
                highlight > 100):
            raise ValueError("sorry, you lose")
        if width == 0 and height == 0 and (color == 'red' or
                                           emphasis is None):
            raise ValueError("I don't think so -- values are %s, %s" %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)

편집하다:이제 PEP8은 다음을 권장합니다. 반대 컨벤션 (이진 연산 중단용) 수학자 및 출판사가 가독성을 높이기 위해 사용합니다.

도널드 크누스(Donald Knuth)의 브레이킹 스타일 ~ 전에 이진 연산자는 연산자를 수직으로 정렬하므로 어떤 항목을 더하고 뺄지 결정할 때 눈의 작업량을 줄여줍니다.

에서 PEP8:이항 연산자 앞이나 뒤에 줄을 끊어야 합니까?:

Donald Knuth는 컴퓨터 및 조판 시리즈에서 전통적인 규칙을 다음과 같이 설명합니다."단락 내의 수식은 항상 이진 연산 및 관계 후에 깨지지만 표시된 수식은 항상 이진 연산 전에 깨집니다."[3]

수학의 전통을 따르면 일반적으로 더 읽기 쉬운 코드가 생성됩니다.

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

Python 코드에서는 규칙이 로컬에서 일관되는 ​​한 이항 연산자 앞이나 뒤에 중단하는 것이 허용됩니다.새로운 코드에는 Knuth의 스타일이 제안됩니다.

[삼]:Donald Knuth의 The TeXBook, 페이지 195 및 196

줄을 끝내기 위해 백슬래시를 사용할 때의 위험은 백슬래시 뒤에 공백이 추가되면(물론 보기 매우 어렵습니다) 백슬래시가 더 이상 생각했던 대로 작동하지 않는다는 것입니다.

Python Idioms 및 Anti-Idioms를 참조하세요. 파이썬 2 또는 파이썬 3) 이상.

넣어 \ 줄 끝에서 또는 괄호로 문장을 묶으십시오. ( .. ).에서 IBM:

b = ((i1 < 20) and
     (i2 < 30) and
     (i3 < 40))

또는

b = (i1 < 20) and \
    (i2 < 30) and \
    (i3 < 40)

괄호와 중괄호 사이에서 줄을 끊을 수 있습니다.또한 백슬래시 문자를 추가할 수 있습니다. \ 명시적으로 줄바꿈하려면 다음을 수행하세요.

x = (tuples_first_value,
     second_value)
y = 1 + \
    2

말의 입에서: 명시 적 라인 결합

둘 이상의 물리적 라인이 백 슬래시 문자를 사용하여 논리적 라인으로 연결될 수 있습니다 (\), 다음과 같습니다:물리적 라인이 문자열 문자 또는 댓글의 일부가 아닌 백 슬래시에서 끝나면 다음과 같은 단일 논리 줄을 형성하여 백 슬래시 및 다음 종단 문자를 삭제합니다.예를 들어:

if 1900 < year < 2100 and 1 <= month <= 12 \
   and 1 <= day <= 31 and 0 <= hour < 24 \
   and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1

백 슬래시로 끝나는 줄은 주석을 가지고 다닐 수 없습니다.백 슬래시는 댓글을 계속하지 않습니다.Backslash는 문자열 리터럴을 제외하고는 토큰을 계속하지 않습니다 (즉, 문자 그럴 이외의 토큰은 백 슬래시를 사용하여 물리적 라인을 통해 분할 될 수 없습니다).백 슬래시는 문자열 문자 외부의 줄의 다른 곳에서 불법입니다.

파이썬적인 방식은 아닐 수도 있지만 일반적으로 SQL 쿼리와 같은 긴 문자열을 작성하기 위해 조인 함수가 있는 목록을 사용합니다.

query = " ".join([
    'SELECT * FROM "TableName"',
    'WHERE "SomeColumn1"=VALUE',
    'ORDER BY "SomeColumn2"',
    'LIMIT 5;'
])

The Hitchhiker's Guide to Python (라인 연속):

코드의 논리적 줄이 허용된 제한보다 길면 이를 여러 물리적 줄로 분할해야 합니다.Python 인터프리터는 줄의 마지막 문자가 백슬래시인 경우 연속된 줄을 연결합니다.이는 어떤 경우에는 도움이 되지만 일반적으로 취약성 때문에 피해야 합니다.백슬래시 뒤 줄 끝에 공백을 추가하면 코드가 손상되어 예기치 않은 결과가 발생할 수 있습니다.

더 나은 해결책은 요소 주위에 괄호를 사용하는 것입니다. 줄 끝 부분에 닫히지 않은 괄호가 남아 있으면 Python 인터프리터는 괄호가 닫힐 때까지 다음 줄에 합류합니다.중괄호와 대괄호에도 동일한 동작이 적용됩니다.

하지만, 긴 논리적 줄을 분할해야 하는 것은 동시에 너무 많은 일을 하려고 한다는 신호이며, 이는 가독성을 방해할 수 있습니다.

그렇다면 다음은 여러 가져오기에 관한 예입니다(이를 초과하는 경우). PEP-8에 정의된 라인 제한):

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top