본문 바로가기
Python/Python FAQ

Python 멀티라인 문자열의 적절한 들여쓰기는 어떻게 해야 하나요?, Proper indentation for multiline strings?

by 베타코드 2023. 9. 12.
반응형

질문


파이썬 함수 내에서 멀티라인 문자열의 적절한 들여쓰기는 무엇인가요?

    def method():
        string = """line one
line two
line three"""

또는

    def method():
        string = """line one
        line two
        line three"""

또는 다른 방법이 있나요?

첫 번째 예시에서 함수 밖에 문자열이 따로 놓여 있는 것이 좀 이상해 보입니다.


답변


아마도 """과 일치하도록 정렬하고 싶을 것입니다.

def foo():
    string = """line one
             line two
             line three"""

새 줄과 공백이 문자열 자체에 포함되어 있으므로 후처리해야합니다. 후처리를 원하지 않고 많은 양의 텍스트를 가지고 있다면 텍스트 파일에 별도로 저장하는 것이 좋습니다. 텍스트 파일이 응용 프로그램에 잘 작동하지 않고 후처리를 원하지 않는다면 아마도 다음과 같이 할 것입니다.

def foo():
    string = ("this is an "
              "implicitly joined "
              "string")

여러 줄로 된 문자열을 후처리하여 필요하지 않은 부분을 제거하려면 textwrap 모듈이나 PEP 257에서 제시된 독스트링 후처리 기법을 고려해야합니다.

def trim(docstring):
    import sys
    if not docstring:
        return ''
    # Convert tabs to spaces (following the normal Python rules)
    # and split into a list of lines:
    lines = docstring.expandtabs().splitlines()
    # Determine minimum indentation (first line doesn't count):
    indent = sys.maxint
    for line in lines[1:]:
        stripped = line.lstrip()
        if stripped:
            indent = min(indent, len(line) - len(stripped))
    # Remove indentation (first line is special):
    trimmed = [lines[0].strip()]
    if indent < sys.maxint:
        for line in lines[1:]:
            trimmed.append(line[indent:].rstrip())
    # Strip off trailing and leading blank lines:
    while trimmed and not trimmed[-1]:
        trimmed.pop()
    while trimmed and not trimmed[0]:
        trimmed.pop(0)
    # Return a single string:
    return '\n'.join(trimmed)
반응형

댓글