출력 형식을 지정하기 위해 f-string에서 new line '\n'을 사용하려면 어떻게 해야 합니까?
나는 이 코드를 시도했습니다.
names = ['Adam', 'Bob', 'Cyril']
text = f"Winners are:\n{'\n'.join(names)}"
print(text)
하만지,'\'
에 사수다없니습용할서부▁▁be 안에서는 할 수 없습니다.{...}
f-string의 입니다.어떻게 하면 작동할 수 있을까요?결과는 다음과 같습니다.
Winners are:
Adam
Bob
Cyril
brace off-string에서 백슬래시를 사용할 수 없는 이유는 무엇입니까?를 참조하십시오. 어떻게 하면 문제를 해결할 수 있습니까?제한이 존재하는 이유에 대한 추가적인 논의를 위해.
그럴수는 없어요. 괄호 안에 수 .{}
그렇게 하면 결과적으로SyntaxError
:
>>> f'{\}'
SyntaxError: f-string expression part cannot include a backslash
이는 f-string에 대한 PEP에 명시되어 있습니다.
백슬래시는 f-string의 식 부분 안에 나타나지 않을 수 있습니다. [...]
한 가지 방법은 노래하는 것입니다.'\n'
어떤 이름으로.join
부의그에것내 안에 것.f
string을 . 즉, 리터럴을 사용하지 않는 경우:
names = ['Adam', 'Bob', 'Cyril']
nl = '\n'
text = f"Winners are:{nl}{nl.join(names)}"
print(text)
결과:
Winners are:
Adam
Bob
Cyril
@wim에서 지정한 다른 옵션은 다음과 같습니다.chr(10)
갖기 위해\n
돌아온 다음 거기에 합류합니다. f"Winners are:\n{chr(10).join(names)}"
물론 또 다른 것은.'\n'.join
사전에 이름을 추가합니다.
n = "\n".join(names)
text = f"Winners are:\n{n}"
결과적으로 동일한 출력이 발생합니다.
참고:
이것은 사이의 작은 차이점 중 하나입니다.f
및 -스너및 캐str.format
후자에서는 다음과 같은 키가 포함된 해당 괴짜 딕트의 압축이 풀리면 언제든지 구두점을 사용할 수 있습니다.
>>> "{\\} {*}".format(**{"\\": 'Hello', "*": 'World!'})
"Hello World!"
(제발 이러지 마세요.)
전자에서는 구두점을 사용하는 식별자를 가질 수 없기 때문에 구두점이 허용되지 않습니다.
별도로: 저는 분명히 선택할 것입니다.print
또는format
다른 답들이 대안으로 제시하는 것처럼.제가 드린 옵션은 어떤 이유로 f-string을 사용해야 하는 경우에만 적용됩니다.
어떤 것이 새로운 것이라고 해서 그것으로 모든 것을 하려고 노력해야 한다는 것을 의미하지는 않습니다 ;-)
구분 기호를 사용하여 문자열 목록을 인쇄하는 데 f-string 또는 기타 형식이 필요하지 않습니다.사용하기만 하면 됩니다.sep
키워드 인수:
names = ['Adam', 'Bob', 'Cyril']
print('Winners are:', *names, sep='\n')
출력:
Winners are:
Adam
Bob
Cyril
즉, /here를 str.format()
사용하는 것이 f-string 해결책보다 더 간단하고 읽기 쉬울 것입니다.
print('\n'.join(['Winners are:', *names]))
print('Winners are:\n{}'.format('\n'.join(names)))
다른 사람들이 말한 것처럼 f-string에서 백슬래시를 사용할 수는 없지만, 사용하여 이 문제를 피할 수 있습니다(비록 이것은 그렇지 않을 것입니다).\n
모든 플랫폼에서, 이진 파일을 읽고 쓰지 않는 한 권장되지 않습니다. Rick의 의견 참조):
>>> import os
>>> names = ['Adam', 'Bob', 'Cyril']
>>> print(f"Winners are:\n{os.linesep.join(names)}")
Winners are:
Adam
Bob
Cyril
아니면 아마도 덜 읽을 수 있는 방법으로, 하지만 확실하게.\n
포함:
>>> print(f"Winners are:\n{chr(10).join(names)}")
Winners are:
Adam
Bob
Cyril
다른 답변은 줄 바꿈 필드에 새 줄 문자를 넣는 방법에 대한 아이디어를 제공합니다.그러나 OP가 제시한 예(OP의 실제 사용 사례를 나타낼 수도 있고 그렇지 않을 수도 있음)에 대해서는 이러한 아이디어 중 어떤 것도 실제로 사용되어서는 안 된다고 주장하고 싶습니다.
f-string을 사용하는 전체 포인트는 코드 가독성을 높이는 것입니다.당신이 할 수 없는 f-string으로 할 수 있는 것은 없습니다.format
이에 대해 더 읽을 수 있는 내용이 있는지 주의 깊게 고려합니다(가능한 경우).
f"Winners are:\n{'\n'.join(names)}"
...또는 다음과 같습니다.
newline = '\n'
f"Winners are:\n{newline.join(names)}"
...또는 다음과 같습니다.
"Winners are:\n{chr(10).join(names)}"
대 이 항목:
"Winners are:\n{}".format('\n'.join(names))
마지막 방법은 적어도 읽을 수 있는 정도는 아닙니다.
간단히 말해서, 여러분이 나사 드라이버가 필요할 때 단지 빛나는 새 것을 가지고 있다고 해서 망치를 사용하지 마세요.코드는 쓰여진 것보다 훨씬 더 자주 읽힙니다.
다른 사용 사례의 경우, 예, 가능성이 있습니다.chr(10)
아이디어나newline
아이디어가 적절할 수 있습니다.하지만 주어진 사람에게는 그렇지 않습니다.
print(f'{"blah\n"}')
위의 진술은 제기될 것입니다.SyntaxError
그러나 오류를 방지하려면 \n을 포함하는 문자열을 변수에 할당하고 f-string으로 사용하기만 하면 됩니다.
x = "blah\n"
print(f'{x}')
가독성이 최우선이고 속도가 진정한 요인이 아니라면, f-string은 프로그래밍할 수 있는 더 간단한 방법이 있더라도 간단한 기능 자체 문서화를 만드는 데 매우 유용합니다.가독성은 다음과 같은 경우에 f-string으로 극대화됩니다. (1) 인수의 상태를 변경하는 문장은 명확하고, (2) 인수가 인쇄될 때 인쇄 문장은 신중하게 형식을 지정하고, 시각적으로 제시되어 인수가 두드러지도록 합니다.
'''
function to print out an identification header, consisting
of the programmer supplied title, lastname, and firstname:
'''
FORMAT_DATE = "%m-%d-%y %H:%M:%S"
date_and_time = datetime.now()
name_line = f"* {lastname}, {firstname}"
title_line = f"* {title}"
date_line = f"* {date_and_time.strftime(FORMAT_DATE)}"
print(name_line
+ '\n'
+ title_line
+ '\n'
+ date_line)
출력:
* Lovelace, Ada
* Bernoulli Numbers algorithm implemented in Python
* 10-28-42 20:13:22
그리고 다음과 같은 이상한 방법을 사용하지 않는 것을 기억하십시오.
names = ['Adam', 'Bob', 'Cyril']
text = f"""{'''
'''.join(names)}"""
print(text)
언급URL : https://stackoverflow.com/questions/44780357/how-can-i-use-newline-n-in-an-f-string-to-format-output
'your programing' 카테고리의 다른 글
jQuery에서 요소(이미지)를 다시 로드/새로 고침하는 방법 (1) | 2023.05.22 |
---|---|
파이썬을 3.7에서 3.6으로 다운그레이드하는 방법 (0) | 2023.05.22 |
msysgit 오른쪽 클릭 메뉴 옵션을 제거하려면 어떻게 해야 합니까? (0) | 2023.05.22 |
왜 큰 장고 쿼리 세트를 통해 반복하는 것이 막대한 양의 메모리를 소비합니까? (0) | 2023.05.22 |
통합 윈도우즈 인증을 사용하여 로그인 프롬프트 수신 (0) | 2023.05.22 |