2012-06-22 2 views
9

최근에 다음 코드 조각이 나타났습니다. 트리플 쿼트의 단일 인스턴스 때문에 유효하지 않지만 잘 작동하는 것 같습니다. 아무도 여기서 무슨 일이 일어날 지 설명 할 수 있습니까?파이썬 문자열 연결 혼동

return ("Validation failed(%s): cannot calculate length " 
     "of %s.""" % (self.name, value))` 

답변

9

모든 문자열이 먼저 연결됩니다.

""은 빈 문자열입니다.

그런 다음 대체가 수행됩니다.

+1

+1 2 분 빠르게 – Mualig

+2

아무도 그런 혼란스러운 코드를 쓰지는 않을 것입니다. 나는 그 질문의 전제를 거부한다! – Felix

+1

따라서 연결 문자열과 마지막 빈 문자열 사이에 공백이 필요하지 않으며 코드의 여러 위치에서 반복됩니다 (필릭스를 의심하는 링크를 게시 할 수 있음). 코딩이 잘못되었습니다. –

1

여러 줄에 문자열을 사용하는 경우 "을 추가하여 한 줄의 출력을 문자열로 연결되도록 할 수 있습니다. 당신은 같은 라인 읽을 수 있습니다 : 코드를 수정할 수있는 경우

return ("Validation failed(%s): cannot calculate length " //1st line 
    "of %s." //2nd line 
    "" % (self.name, value)) //3rd line (empty) 
0

을, 문자열을 포맷에 대한 % 구문이 오래된되고 있습니다. 그것은 여러 줄에 걸쳐해야하는 경우

return "Validation failed({0}): cannot calculate length of {1}.".format(self.name, value) 

사용 : - 기본적으로, 문자열 리터럴 각 옆에 직접 나타나는

return ("Validation failed({0}): " + 
     "cannot calculate length of {1}.".format(self.name, value)) 
+0

이것은 실제로 질문에 대답하지 않기 때문에 주석이어야합니다. 원래 코드에서 똑같은 문자열 리터럴 연결 때문에'+'는 필요 없습니다. – lvc

4

이 파이썬의 string literal concatenation는 파이썬의 버전이 지원하는 경우 당신은 str.format()를 사용해야합니다 다른 하나는 하나의 문자열로 구문 분석됩니다 : 당신의 예에서

>>> 'foo' 'bar' 
'foobar' 

, 당신은 마지막으로,326입니다 (행에 세 개의 문자열 리터럴을, 빈 문자열)이 끝나고 삼중 따옴표로 시작하지 않는 단일 멀티 라인 리터럴 대신이 방법으로 연결됩니다.

+0

+1을 참조하십시오. –