Python에서 줄바꿈(줄 연속)을 어떻게 할 수 있나요?
-
09-06-2019 - |
문제
여러 줄로 나누고 싶은 긴 코드 줄이 있습니다.무엇을 사용하고 구문은 무엇입니까?
예를 들어, 여러 문자열을 추가하면
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의 암시적 줄 연속을 사용하는 것입니다. 표현식을 괄호로 묶어 긴 줄을 여러 줄로 나눌 수 있습니다.줄 연속을 위해 백슬래시를 사용하는 것보다 우선적으로 사용해야 합니다.
백슬래시는 때때로 적절할 수도 있습니다.예를 들어, 길고 여러 개의 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
넣어 \
줄 끝에서 또는 괄호로 문장을 묶으십시오. ( .. )
.에서 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
)