[python] 파이썬에서 줄 바꿈 (줄 연속)을 어떻게 할 수 있습니까?

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

예를 들어 문자열 묶음을 추가하면

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

스타일 가이드에 따르면 괄호와 함께 암시 적 연속을 사용하는 것이 바람직하지만이 경우에는 식 주위에 괄호를 추가하는 것이 잘못된 방법 일 수 있습니다.


답변

PEP 8 부터 -파이썬 코드를위한 스타일 가이드 :

긴 줄을 줄 바꿈하는 가장 좋은 방법은 괄호, 괄호 및 중괄호 안에 파이썬의 묵시적 줄 연속을 사용하는 것입니다. 긴 줄은 식을 괄호로 묶어 여러 줄로 나눌 수 있습니다. 라인 연속에 백 슬래시를 사용하는 것보다 우선적으로 사용해야합니다.

백 슬래시는 여전히 적절한 경우가 있습니다. 예를 들어 길고 여러 개의 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())

또 다른 경우는 주장 진술입니다.

연속 줄을 적절히 들여 쓰십시오. 이진 연산자를 돌파하기 위해 선호되는 장소 는 연산자가 아닌 연산자 입니다. 몇 가지 예 :

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)

파이썬 코드에서는 규칙이 로컬로 일관성이있는 한 이진 연산자 전후에 중단 할 수 있습니다. 새로운 코드의 경우 Knuth의 스타일이 제안됩니다.

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


답변

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

자세한 내용은 Python Idioms 및 Anti-Idioms ( Python 2 또는 Python 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

백 슬래시로 끝나는 줄은 주석을 포함 할 수 없습니다. 백 슬래시는 주석을 계속하지 않습니다. 백 슬래시는 문자열 리터럴을 제외하고 토큰을 계속하지 않습니다 (즉, 문자열 리터럴 이외의 토큰은 백 슬래시를 사용하여 실제 행으로 분할 할 수 없음). 백 슬래시는 문자열 리터럴 외부의 행에서 불법입니다.


답변

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

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