Python으로 긴 줄 바꿈
들여쓰기를 희생하지 않고 긴 줄을 Python으로 포장하려면 어떻게 해야 하나요?
예를 들어 다음과 같습니다.
def fun():
print '{0} Here is a really long sentence with {1}'.format(3, 5)
이 값이 79글자의 권장 제한을 초과했다고 가정합니다.제가 읽는 방법은 다음과 같습니다.
def fun():
print '{0} Here is a really long \
sentence with {1}'.format(3, 5)
단, 이 접근법에서는 연속된 회선의 들여쓰기는 다음 행의 들여쓰기와 일치합니다.fun()
이거 좀 못생겼는데?만약 누군가가 내 코드를 확인한다면, 이것 때문에 얼룩이 있는 것은 나빠 보일 것이다.print
진술.
코드의 가독성을 희생하지 않고, 이러한 행을 효과적으로 들여쓰려면 어떻게 해야 합니까?
def fun():
print(('{0} Here is a really long '
'sentence with {1}').format(3, 5))
인접한 문자열 리터럴은 C와 같이 컴파일 시에 연결됩니다.자세한 내용은 http://docs.python.org/reference/lexical_analysis.html#string-literal-concatenation 를 참조해 주세요.
인접한 스트링 리터럴과 포맷된 스트링 리터럴의 연결을 사용하는 방법이 있습니다.
x = 2
sep = 2 * '\n'
print(
'This message is so long that it requires '
f'more than {x} lines.{sep}'
'And more lines may be needed.')
이 접근방식은 PEP 8에 준거하여 공간을 보다 효율적으로 사용할 수 있습니다.
아니요.+
연산자 필요, 회선 연속을 위한 백슬래시 없음, 불규칙한 들여쓰기, 오류 발생 가능성 없음+=
어큐뮬레이터 문자열 변수(로 잘못 입력될 수 있음)로 이동합니다.=
(사일런트 에러가 발생합니다).print
(인수는 그 자체의 들여쓰기 레벨에 배치되고 다음 요소는 다음 들여쓰기 레벨에 배치됩니다.print
다음 스테이트먼트입니다).
를 포함하는 행 아래 행의 문자열 시작print(
들여쓰기를 줄여 가독성을 높입니다.가독성은 두 가지 모두print(
이 양식의 연속된 문장의 획일적인 정렬에 의해, 그 자체의 선상에 있는 것으로써, 눈에 띈다.
예외를 제기할 때 이 접근법에 의한 들여쓰기 감소가 더욱 뚜렷해진다.
raise ModuleNotFoundError(
'aaaaaaaaaaaaaaaaaaaaaaaa'
'aaaaaaaaaaaaaaaaaaaaaaaa'
f'aaaaa {x} aaaaa')
형식화된 문자열 리터럴(와 같이 접두사 "f"로 표시됨)에 대해f'...'
raw 문자열은 프리픽스 "r"과 "f"를 조합하여 스트링 리터럴 형식을 지정할 수 있습니다.
rf'This is a formatted raw string, {sep}here is a backslash \.'
쓰기 없이 리터럴 백슬래시를 포함하려면 원시 문자열이 필요합니다.\\
그렇지 않으면 향후 CPython 버전에서 a가 발생합니다.Python 3.9에서는DeprecationWarning
다음과 같이 됩니다.
python -X dev -c '"\q"'
출력:
<string>:1: DeprecationWarning: invalid escape sequence \q
대체물은 매우 읽기 쉽다.특히, 이 접근법은 코드나 수학 공식을 생성하는 코드를 작성하는 것을 매우 즐거운 작업으로 만듭니다.
방법 「」 「」 「」 「」str.format
대체품이 필요하기 때문에 적합할 수 있습니다.을 사용하다
print((
'This message is so long that it requires '
'more than {x} lines.{sep}'
'And more lines may be needed.'
).format(x=x, sep=sep))
들여쓰기가 중요하지 않은 경우 다음 코드를 사용할 수 있습니다.
>>> def fun():
return ('{0} Here is a really long'
' sentence with {1}').format(3, 5)
괄호 안에 문자열을 넣기만 하면 됩니다.
Python이 서로 인접한 문자열 리터럴을 연결한다는 사실을 사용할 수 있습니다.
>>> def fun():
... print '{0} Here is a really long ' \
... 'sentence with {1}'.format(3, 5)
프로그램 로직이 긴 문자열의 정의에서 분리되도록 긴 문을 여러 개의 짧은 문으로 나눕니다.
>>> def fun():
... format_string = '{0} Here is a really long ' \
... 'sentence with {1}'
... print format_string.format(3, 5)
문자열이 너무 길어서 짧은 변수 이름을 선택한 경우 이렇게 하면 문자열을 분할할 필요가 없어집니다.
>>> def fun():
... s = '{0} Here is a really long sentence with {1}'
... print s.format(3, 5)
나는 아무도 위의 암묵적인 스타일을 언급하지 않았다니 놀랍다.제가 선호하는 것은 줄을 시각적으로 정렬하면서 패런을 사용하여 줄을 감는 것입니다.개인적으로, 나는 이것이 탭으로 된 새 줄에서 줄의 선두를 시작하는 것보다 더 깨끗하고 작아 보인다고 생각한다.
이들 패런은 메서드콜의 일부가 아니라 암묵적인 문자열 리터럴 연결일 뿐입니다.
Python 2:
def fun():
print ('{0} Here is a really '
'long sentence with {1}').format(3, 5)
Python 3(인쇄 기능용 패런 포함):
def fun():
print(('{0} Here is a really '
'long sentence with {1}').format(3, 5))
개인적으로 긴 문자열 리터럴과 인쇄를 분리하는 것이 가장 깔끔하다고 생각합니다.
def fun():
s = ('{0} Here is a really '
'long sentence with {1}').format(3, 5)
print(s)
언급URL : https://stackoverflow.com/questions/3346230/wrap-long-lines-in-python
'programing' 카테고리의 다른 글
PHP: 재인덱스화 대신 키를 유지하면서 두 어레이를 병합하시겠습니까? (0) | 2022.10.20 |
---|---|
mysql을 사용하여 처음 필터링된 결과에 따라 테이블 행 추가 (0) | 2022.10.20 |
스크립트를 실행하고 있는 Python 버전을 확인하려면 어떻게 해야 합니까? (0) | 2022.10.20 |
어레이에서 스트림을 작성하려면 어떻게 해야 합니까? (0) | 2022.10.20 |
JavaScript에서 임의의 영숫자 문자열? (0) | 2022.10.20 |