2013-11-02 5 views
3

:제목에 명시된 바와 같이

print "Hello, my name is %s, I am %d\% confused!" % ("steve", 100) 

내가 알고있는 솔루션에 %%을 사용하는 것입니다 %을 나타내지 만 보간 연산자를 사용할 때 \%이 작동하지 않는 이유는 무엇입니까?

print "Hello, my name is %s\n, I am %d%% confused!" % ("steve", 100) 

인쇄 :

안녕하세요, 제 이름은 스티브,
I이다 나는 이것이 어떤 임의의 디자인 결정이 아니었다과 같이 보간 연산자를 사용하는 경우 \ 여전히 탈출 물론 가정 100 % 혼란 스럽네요!

답변

3

"임의"디자인 결정이 아닙니다. \n is a standard C escape sequence; 문자열 서식 지정의 경우 %이 아닙니다. \ 대신 %을 사용하면 %을 피할 수 있습니다.

Python's % string formatting (deprecated in Python 3.1) is based on C's sprintf입니다. 여기에서 %% 문자로 %이라는 글자를 인쇄합니다. 이것은 이스케이프 시퀀스가 ​​아니라는 점에 유의하십시오. 첫 번째 %은 두 번째 것을 벗어나지 않습니다! 다른 모든 변환 사양과 마찬가지로 첫 번째 %은 변환 지정자를 도입하고 두 번째 %은 변환 지정자입니다.

자세한 내용은 your friendly neighborhood man sprintf pages을 참조하십시오.

+1

[글쎄, 내가 틀렸어] (http://stackoverflow.com/questions/19738739/print-special-characters/19738743#19738743). 매일 새로운 것을 배우십시오 :) – TerryA

2

\으로 이스케이프 처리하는 것은 구문 분석기 용이며 문자열 개체를 만들기 전에 작업을 수행하므로 '\x5cn'은 줄 바꿈을하지 않습니다. 개체가 만들어진 후 %이 양식 자용이지만 '\x25s' % 'n'은 좋습니다. \%을 사용하는 경우

, \% 탈출 할 방법? \\% 또는 \%%은 최악의, 가장 간단한 솔루션을 탈출하는 다른 기술이있다, 특수 문자 자체를 탈출이다, 여기 읽어 \\%%를 사용하여 작동하지 않습니다 Delimiter collision.

+0

'\\\ %'이 (가) 작동하지 않는 이유는 무엇입니까? –

+0

@SteveP. '\\ %%'와'\\\ %'는'%%'보다보기가 어렵습니다. –

관련 문제