etc./StackOverFlow

줄 바꿈(줄 연속)은 어떻게 합니까?

청렴결백한 만능 재주꾼 2023. 4. 30. 00:08
반응형

질문자 :Ray


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

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

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

또는 명시적인 줄 바꿈으로:

 if a == True and \ b == False:

자세한 내용 은 스타일 가이드 를 확인하세요.

괄호를 사용하면 여러 줄에 걸쳐 예제를 작성할 수 있습니다.

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

명시적 줄 바꿈을 사용하여 동일한 효과를 얻을 수 있습니다.

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

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


Harley Holcombe

PEP 8에서 -- 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는 자신의 Computers and Typesetting 시리즈에서 전통적인 규칙을 다음과 같이 설명합니다. "단락 내의 수식은 항상 이진 연산 및 관계 후에 중단되지만 표시된 수식은 항상 이진 연산 전에 중단됩니다."[3].

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

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

Python 코드에서 규칙이 로컬에서 일관되는 한 이항 연산자 앞이나 뒤에 중단할 수 있습니다. 새 코드의 경우 Knuth의 스타일이 제안됩니다.

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


jfs

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

자세한 내용은 Python Idioms 및 Anti-Idioms( Python 2 또는 Python 3용 )를 참조하세요.


George V. Reilly

\ 를 넣거나 문을 괄호 ( .. ) 묶습니다. IBM에서 :

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

또는

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

SCdF

괄호와 중괄호 사이에 줄을 끊을 수 있습니다. 또한 백슬래시 문자 \ 를 줄에 추가하여 명시적으로 끊을 수 있습니다.

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

Konrad Rudolph

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

\ )를 사용하여 논리적 라인으로 결합될 수 있습니다. 물리적 라인이 문자열 리터럴 또는 주석의 일부가 아닌 백슬래시로 끝나는 경우 다음과 결합되어 단일 논리적 줄, 백슬래시 및 다음 줄 끝 문자를 삭제합니다. 예를 들어:

 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

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


Jason Navarrete

긴 리터럴 문자열로 인해 줄을 나누려면 해당 문자열을 조각으로 나눌 수 있습니다.

 long_string = "a very long string" print("a very long string")

로 대체됩니다

 long_string = ( "a " "very " "long " "string" ) print( "a " "very " "long " "string" )

두 인쇄 문에 대한 출력:

a very long string

영향의 괄호에 주목하십시오.

또한 리터럴 문자열을 조각으로 나누면 문자열의 일부에만 리터럴 접두사를 사용하고 구분 기호를 혼합할 수 있습니다.

 s = ( '''2+2=''' f"{2+2}" )

jlaurens

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

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

Hardik Sondagar

여러 줄에서 obj.method() ) 호출을 중단할 수도 있습니다.

명령을 괄호 " () "로 묶고 여러 줄로 확장합니다.

 > res = (some_object .apply(args) .filter() .values)

예를 들어 Pandas/Holoviews 개체 메서드를 호출하는 체인에서 유용하다는 것을 알았습니다.


Brandt

The Hitchhiker's Guide to Python (Line Continuation )에서 발췌:

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

더 나은 솔루션은 요소 주위에 괄호를 사용하는 것입니다. 줄 끝에서 닫히지 않은 괄호로 남겨두면 Python 인터프리터는 괄호가 닫힐 때까지 다음 줄에 합류합니다. 중괄호와 대괄호에도 동일한 동작이 적용됩니다.

그러나 대부분의 경우 긴 논리적 줄을 분할해야 한다는 것은 동시에 너무 많은 일을 하려고 하고 있다는 신호이며, 이는 가독성을 저해할 수 있습니다.

즉, 다음은 일반적으로 문자열에도 적용되는 다중 가져오기(PEP-8에 정의된 라인 제한을 초과할 때)를 고려한 예입니다.

 from app import ( app, abort, make_response, redirect, render_template, request, session )

ivanleoncz

출처 : http:www.stackoverflow.com/questions/53162/how-can-i-do-a-line-break-line-continuation

반응형