programing

Python으로 긴 줄 바꿈

procenter 2022. 10. 20. 21:46
반응형

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

반응형