Python에서는 어떻게 이 긴 줄을 끊을 수 있을까요?
이렇게 긴 줄을 어떻게 포맷할 수 있을까요?가로 세로 길이는 80자 이내로 해 주세요.
logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))
이게 최선의 선택인가요?
url = "Skipping {0} because its thumbnail was already in our system as {1}."
logger.info(url.format(line[indexes['url']], video.title))
그게 시작이야.긴 문자열을 사용하는 코드 밖에서 정의하는 것도 나쁘지 않습니다.데이터와 동작을 분리하는 방법입니다.첫 번째 옵션은 문자열 리터럴을 서로 인접하게 함으로써 암묵적으로 결합하는 것입니다.
("This is the first line of my text, "
"which will be joined to a second.")
또는 회선 끝의 연속성을 사용하는 경우, 이것은 조금 더 취약하기 때문에 다음과 같이 동작합니다.
"This is the first line of my text, " \
"which will be joined to a second."
하지만 이것은 아닙니다.
"This is the first line of my text, " \
"which will be joined to a second."
차이를 알 수 있을까요?안 그래? 그게 네 암호일 때도 안 그럴 거야
(뒤에 공백이 있습니다).\를 참조해 주세요).
암묵적 결합의 단점은 변수에서 가져온 문자열이 아니라 문자열 리터럴에서만 작동한다는 것입니다. 따라서 리팩터링할 때 문제가 좀 더 복잡해질 수 있습니다.또한 조합된 문자열 전체에 대한 형식만 보간할 수 있습니다.
또는 연결 연산자를 사용하여 명시적으로 가입할 수도 있습니다( ).+):
("This is the first line of my text, " +
"which will be joined to a second.")
명시적(explicit)은 python의 zen이 말하는 것처럼 암묵적(implicit)보다 낫지만, 이것은 1개가 아닌 3개의 스트링을 만들고 2배의 메모리를 사용합니다.작성된 2개가 있고, 그 2개가 합쳐져 있기 때문에, 언제 zen을 무시해야 하는지 알아야 합니다.여기서의 장점은 각 행의 임의의 서브스트링에 개별적으로 포맷을 적용하거나 괄호 외부에서 전체 로트에 포맷을 적용할 수 있다는 것입니다.
마지막으로 세 개의 따옴표로 묶인 문자열을 사용할 수 있습니다.
"""This is the first line of my text
which will be joined to a second."""
이것은 자주 마음에 듭니다만, 그 동작은 조금 다릅니다.새로운 행과 후속 행의 선두 공백이 마지막 문자열에 나타나기 때문입니다.이스케이프 백슬래시를 사용하여 새 줄을 제거할 수 있습니다.
"""This is the first line of my text \
which will be joined to a second."""
이는 위의 기술과 동일한 문제로 올바른 코드가 올바르지 않은 코드와 보이지 않는 공백으로만 다르다는 것입니다.
어떤 것이 가장 좋은가 하는 것은 당신의 특정한 상황에 따라 다르지만, 답은 단순히 미적인 것이 아니라 미묘하게 다른 행동 중 하나입니다.
연속된 문자열 리터럴은 컴파일러에 의해 결합되며 괄호로 둘러싸인 표현은 코드 한 줄로 간주됩니다.
logger.info("Skipping {0} because it's thumbnail was "
"already in our system as {1}.".format(line[indexes['url']],
video.title))
개인적으로 오픈 블록을 거는 것을 싫어하기 때문에 다음과 같이 포맷합니다.
logger.info(
'Skipping {0} because its thumbnail was already in our system as {1}.'
.format(line[indexes['url']], video.title)
)
일반적으로 나는 80열 행에 정확히 맞는 코드를 만들기 위해 애쓰지 않을 것이다.선의 길이를 적당한 수준으로 줄이는 것은 가치가 있지만, 하드 80 제한은 이미 과거의 일이 되었습니다.
텍스트랩 모듈을 사용하여 여러 줄로 분할할 수 있습니다.
import textwrap
str="ABCDEFGHIJKLIMNO"
print("\n".join(textwrap.wrap(str,8)))
ABCDEFGH
하지림노
매뉴얼에서 다음 항목을 참조하십시오.
textwrap.text(text[, width[, ...])
각 행이 최대 너비 문자로 구성되도록 단일 단락을 텍스트(문자열)로 바꿉니다.최종 줄 바꿈 없이 출력 줄 목록을 반환합니다.옵션의 키워드 인수는 다음에 기재되어 있는의 인스턴스 Atribut에 대응합니다.width 기본값은 입니다.
70.wrap()의 동작에 대한 자세한 내용은 방법을 참조하십시오.
전화를 걸려는 분들을 위해.format()긴 스트링으로, 가장 인기 있는 스트링 랩 기술을 사용할 수 없는 경우, 그 후의 스트링 랩 기술을 중단하지 않고서는.format(콜, 할 수 있습니다.str.format("", 1, 2)대신"".format(1, 2)원하는 기술로 줄을 끊을 수 있습니다.예를 들어 다음과 같습니다.
logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))
수 있습니다.
logger.info(str.format(("Skipping {0} because its thumbnail was already"
+ "in our system as {1}"), line[indexes['url']], video.title))
그렇지 않으면, 유일한 가능성 continuations 종료하고, 그것은 내가 개인적으로 팬이 아닌 라인을 사용하고 있다.
추가 없이 붕괴 하중:.
def split_by_len(txt: str, l: int, sep: str or None='\n') -> str or list:
"""
txt: str text
l: split length (symbols per split)
sep: separate string or None for list of strs
"""
spl_list = [txt[i * l : i * l + l] for i in range(len(txt) // l + 1)]
return spl_list if sep==None else sep.join(spl_list)
예 1:
print(split_by_len(txt='XXXXX', l=2, sep='\n'))
XX
XX
X
예 2:
print(split_by_len(txt='XXXXX', l=2, sep=' '))
XX XX X
예제 3시
print(split_by_len(txt='XXXXX', l=2, sep=None))
['XX', 'XX', 'X']
언급URL:https://stackoverflow.com/questions/2058925/how-can-i-break-up-this-long-line-in-python
'source' 카테고리의 다른 글
| null일 때 빈 문자열 가져오기 (0) | 2022.09.20 |
|---|---|
| MySQL에서 인쇄문을 시뮬레이트하려면 어떻게 해야 합니까? (0) | 2022.09.20 |
| cURL 에러(7): 호스트에 접속할 수 없었습니다. (0) | 2022.09.20 |
| PHP 5 엄격한 표준 사용 안 함 오류 (0) | 2022.09.19 |
| Java 가비지 컬렉션 로그 메시지 (0) | 2022.09.19 |