2009-12-21 3 views
8

파이썬 2.6에서 다음 줄은 왜 유효합니까?구문 quirks 또는 왜 그 유효한 파이썬

my_line = 'foo' 'bar' 

하고이 유효한 경우, 이유는 다음되지 않습니다 :

my_list = 1 2 

첫 번째 예는, 그러나, 다음 중 하나를 유효한 문자열 연결하지 않다 (감사 신) :

foo = 'foo' 
bar = 'bar' 
foo_bar = foo bar 
+1

컴파일시에 문자열을 추가 될 수 있습니다 'my_list = 1 2' 예제가 제안하는 것처럼 "제거"하는 부분을 보지 마십시오. – jldupont

+0

그것은 제안하지 않습니다. 필자가 제안하는 것은 파이썬 구문의이 측면이 일관성이 없다는 것입니다 (imho). –

+3

광범위하게 논의되는 PEP http://www.python.org/dev/peps/pep-3126/을 참조하십시오. – stephan

답변

20

이것은 string literal concatenation입니다. 이 기능은 필요한 백 슬래시의 수를 줄일 수 있습니다

편리하게 긴 줄에 걸쳐 긴 문자열을 분할, 또는 부분에 주석을 추가 할 : 문서에서 언급 한 바와 같이, 장점은 다음과 같습니다 문자열의 ...

그것은이 연결은 컴파일 시간 시간이 아닌 실행에 을 완료주의에 간다.

이 배경의 역사와 근거, 기능을 제거하기위한 거부 된 제안은 PEP 3126에 설명되어 있습니다.

8

my_line = 'foo' 'bar'은 문자열 연결입니다.

+3

여전히 Python 3.1에서 작동하지만 나는 그것을별로 좋아하지 않습니다. –

+0

@Ipthnc 나도. 다행히 나는이 방법으로 쓰여진 코드를 보지 못했고, 나는 결코 그럴 필요가 없기를 바란다 ... 나는 그것이 도대체 그것이 무엇인지를 잊을 것이라고 확신한다! –

+0

코드를 "자동 생성"할 때 유용 할 수 있지만,이 외에도 장점이 있는지는 알 수 없습니다. – jldupont

5

일관성이 없습니다. 문자열과 정수에는 다른 메소드가 있습니다.

정수 연결은 의미가 없습니다.

문자열 연결은 의미있는 기본 동작입니다.

6

아마도 이것은 C의 조상입니다. C에서 다음 완벽하게 유효합니다

char* ptr = "hello " "world"; 

그것은이 C pre-processor (cpp)에 의해 구현, 그 링크에 주어진 근거가된다

이 긴 문자열이 여러 줄에 걸쳐 을 분할 할 수 있습니다 , 또한 C에서 처리기 정의하고 매크로를 결과 문자열 리터럴 내가 할

관련 문제