2012-06-26 3 views
0

그냥 재미를 위해, 파이썬에서 문자열을 반대하는이 간단한 기능을 썼다 : 나는 다음과 같은 두 개의 문자열로 전달하면특수 문자를 이스케이프 처리하는 이상한 동작은 어떻게 설명됩니까?

def reverseString(s): 
    ret = "" 
    for c in s: 
     ret = c + ret 
    return ret 

지금, 나는 흥미로운 결과를 얻을 수 있습니다. 특수 문자를하지 왜 \n 함수에 전달 될 때 새로운 라인으로 번역하지만, 함수에 의해 함께 그것을 구문 분석하지 않을 경우 얻을 :

print reverseString("Pla\net") 
print reverseString("Plan\et") 

이의 출력은 내 질문은

te 
alP 
te\nalP 

입니다 반전 n\? 또한, 어떻게하면 \n 파싱에서 기능을 중지하고 대신 n\을 반환 할 수 있을까요?

답변

4

: 유효한 이스케이프 시퀀스 아니므로 \e 두 개의 문자가있는 동안

>>> list("Pla\net") 
['P', 'l', 'a', '\n', 'e', 't'] 
>>> list("Plan\et") 
['P', 'l', 'a', 'n', '\\', 'e', 't'] 

그래서 당신은 볼 수는 \n는 하나의 문자입니다 .

는이를 방지 백 슬래시 자체를 탈출, 또는 원시 문자열을 사용하려면

>>> list("Pla\\net") 
['P', 'l', 'a', '\\', 'n', 'e', 't'] 
>>> list(r"Pla\net") 
['P', 'l', 'a', '\\', 'n', 'e', 't'] 
2

'\ n'은 단일 문자입니다. \ e가 유효한 이스케이프가 아닌 것 같아서 두 개의 문자로 처리됩니다.

당신이 원하는 원시 문자열로 보면, 또는 당신이 실제로 문자를 원하는 목적지 단지 '\\'사용 '\'

1

번역은 파이썬의 구문의 함수이므로, 그것은 단지의 파이썬의 구문 분석하는 동안 발생 파이썬 자체에 입력 (즉, 파이썬이 코드를 파싱 할 때). 다른 시간에는 발생하지 않습니다.

프로그램의 경우 객체로 구성 될 때까지 '\n'으로 표시된 단일 문자와 구성된 경우 하위 문자열 '\e'이 포함 된 문자열이 있습니다. 당신이 그들을 뒤집은 후, 파이썬 그들을 reparse하지 않습니다.

당신은 어떻게되는지 개별 문자 순서를 살펴한다
관련 문제