2016-06-10 1 views
0

나는 string.Template을 사용하여 파이썬 코드를 생성하고 있습니다. 결과는파이썬 문자열 템플릿 : 올바른 들여 쓰기로 여러 줄 바꾸기

import numpy 

def main(): 
    a = 1 
b = 2 
print(a + b) 
    return 

말이이지만, 물론 내가 원하는 아닌 여러 줄 문자열 ${content}를 대체 할 때

import numpy 

def main(): 
    ${content} 
    return 

같은 템플릿의 힘이 보인다. 문장을 개행 문자로 연결하는 대신 ;을 사용할 수 있지만 가독성을 위해 모든 들여 쓰기에 올바른 들여 쓰기를하고 싶습니다.

${content}을 개행 문자열로 대체하고 들여 쓰기를 올바르게 할 수 있습니까?

답변

0

몇 가지 옵션을 생각할 수 있습니다. '인쇄하고 올바르게 들여 쓰지 마라.'

1) 당신은 너무처럼 여러 문자열의 공간/줄 바꿈을 포함 할 수 있습니다 :

"""a = 1 
    b = 2 
    print(a + b)""" 

2) 당신은 생성 된 파이썬 파일을 통해 autopep8을 사용하고, 그것을 실행할 수 있습니다.

3) 또는 대신 단일 여러 문자열로 유지, 당신은 문자열 목록으로 유지하고 같은 것을 할 수있는 :

def assemble_code_string(content_list, indent): 
    # assemble the content_list into a single string, prepending the indent value of spaces to each content_list 
    return '\n'.join(["%s%s"%(' '*indent, line) for line in content_list]) 

을 다음 ${content} 같은 것을 사용합니다. 이것은 내용 목록의 모든 줄 앞에 동일한 들여 쓰기가 있다고 가정하므로 매우 간단합니다. 당신이 필요하다면 당신이 그걸 만들 수있을 것이라고 확신합니다.

+0

(1)과 (3)에 대해 확실하지 않습니다. 결국 코드를 ​​생성 할 때 템플릿의 들여 쓰기를 알 수는 없습니까? 아마도 파일에서 읽을 수 있어야합니다. (2) 좋은 소리지만, 많은 상황에서 충분하지 않을 것이다. 의도하지 않은 코드는 합법적 일 수 있습니다. –

+0

Re 2 그게 사실이야,하지만 위의 간단한 예제에서는 들여 쓰기 된'return' 위의 경우 autopep8이 그것을 파악하는 데 충분할 수 있습니다. 하나의'$ {content} '에 여러 메소드가 있다면, 한번에 얼마나 많은 코드를 작성하려고하는지 모르겠다. 실패 할 수도있다. 그게 제가 3)에서 얻은 것입니다. 일반적인 들여 쓰기로 내용을 분리 한 다음, 들여 쓰기로'assemble_code_string'을 사용하여 dest 파일로 템플릿을 만듭니다. 내가 말했듯이, afaik. – RedCraig

관련 문제