f '{{{74}}}'와 f-String의 f '{{74}}'이 (가) 동일한 이유는 무엇입니까?


109

f-String 은 Python 3.6에서 사용할 수 있으며 문자열 형식에 매우 유용합니다.

>>> n='you'
>>> f'hello {n}, how are you?'
'hello you, how are you?'

Python 3의 f-Strings : 향상된 문자열 형식화 구문 (Guide) 에서 이에 대해 자세히 알아보십시오 . 흥미로운 패턴을 찾았습니다.

삼중 괄호를 사용하면 문자열에 단일 괄호 만있게됩니다.

>>> f"{{{74}}}"
'{74}'

그러나 트리플 중괄호를 여러 개 사용하는 경우 더 많은 중괄호를 표시 할 수 있습니다.

>>> f"{{{{74}}}}"
'{{74}}'

그리고 이것은 정확히 그렇습니다 :

>>> f'{74}'
'74'

>>> f'{{74}}'
'{74}'

이제 2 {에서 3으로 전달 하면 결과는 같습니다.

>>> f'{{{74}}}'
'{74}'           # same as f'{{74}}' !

따라서 최대 4 개가 필요합니다! {{{{출력으로 두 개의 괄호를 얻으려면 ( ) :

>>> f'{{{{74}}}}'
'{{74}}'

왜 이런거야? 파이썬이 그 순간부터 여분의 것을 필요로하기 위해 두 개의 중괄호는 어떻게됩니까?


70
그것의 출력과 비교하기 위해 조명 될 수있다 f"{{2+2}}"하고 f"{{{2+2}}}"있으며, '{2+2}'그리고 '{4}'각각
케빈

3
@Kevin 위대한 하나. f'{2+2}'4를 f'{{2+2}}'반환하고 2 + 2, f'{{{2+2}}}'➝ {4}, f'{{{{2+2}}}}'➝ {{2 + 2}} 등을 반환 하는 방법은 재미 있습니다. 이해가 되겠지만 첫눈에 약간의 퍼즐입니다.
fedorqui 'SO 중지 피해

2
간단히 말해서, f'{74}'와 같기 때문 입니다 f'74'.
kaya3

1
이것은 f- 문자열에 새로운 것이 아니며, 오래된 str.format것도 마찬가지입니다.
Peilonrayz

@Peilonrayz 어떻게? "{74}".format(...)최소 74 개의 요소가있는 시퀀스가 ​​필요합니다.
gerrit

답변:


118

이중 괄호는 괄호를 이스케이프하므로 보간이 발생하지 않습니다 : {{{}}}. 그리고 74변경되지 않은 문자열로 남아 있습니다 '74'.

3 중 버팀대를 사용하면 위와 같이 외부 이중 버팀대가 이스케이프됩니다. 반면 내부 괄호는 값의 문자열 보간을 정기적으로 수행합니다 74.

즉, 문자열 f'{{{74}}}'은와 동일 f'{{ {74} }}'하지만 공백이 없습니다 (또는 동등하게 '{' + f'{74}' + '}').

숫자 상수를 변수로 대체 할 때의 차이점을 확인할 수 있습니다.

In [1]: x = 74

In [2]: f'{{x}}'
Out[2]: '{x}'

In [3]: f'{{{x}}}'
Out[3]: '{74}'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.