Programing

'+'연산자없이 문자열 연결

lottogame 2020. 12. 26. 09:25
반응형

'+'연산자없이 문자열 연결


나는 파이썬으로 놀고 있었고 값과 함께 사용되지 않는 한 문자열을 연결하기 위해 '+'연산자를 사용할 필요가 없다는 것을 깨달았습니다.

예를 들면 :

string1 = 'Hello'   'World'  #1 works fine
string2 = 'Hello' + 'World'  #2 also works fine

string3 = 'Hello'
string4 = 'World'
string5 = string3   string4  #3 causes syntax error
string6 = string3 + string4  #4 works fine

이제 두 가지 질문이 있습니다.

  1. 문 1이 작동하는 동안 문 3이 작동하지 않는 이유는 무엇입니까?
  2. 문 1과 2 사이에 계산 속도 등 기술적 차이가 있습니까?

로부터 문서 :

여러 개의 인접 문자열 리터럴 (공백으로 구분됨)이 허용되며 다른 인용 규칙을 사용할 수 있으며 그 의미는 연결과 동일합니다. 따라서 "hello" 'world'는 "helloworld"와 동일합니다.


문 3은 다음과 같은 이유로 작동하지 않습니다.

런타임에 문자열 식을 연결하려면 '+'연산자를 사용해야합니다.

문서에서 하위 헤더의 제목도 "문자열 리터럴 연결"이라는 점에 유의하십시오. 이것은 다른 객체가 아닌 문자열 리터럴에 대해서만 작동합니다.


아마 차이가 없을 것입니다. 만약 있다면 그것은 아마도 극도로 작고 누구도 걱정할 필요가 없을 것입니다.


또한 이것에 대한 위험이있을 수 있음을 이해하십시오.

>>> def foo(bar, baz=None):
...     return bar
... 
>>> foo("bob"
... "bill")
'bobbill'

이것은 오류가 조용히 전달되지 않아야 하는 완벽한 예입니다 . 내가 "bill"논쟁이되고 싶다면 baz? 쉼표를 잊어 버렸지 만 오류가 발생하지 않습니다. 대신 연결이 발생했습니다.


두 번째 질문에 답하기 위해 : 전혀 차이가 없습니다 (적어도 내가 사용하는 구현에서는). 두 문을 모두 분해하면 LOAD_CONST STORE_FAST. 동등합니다.


%s+ 기호를 사용하는 것보다 더 효율적이므로 사용할 수 있습니다 .

>>> string2 = "%s %s" %('Hello', 'World')
>>> string2
'Hello World'

(또는)


또 하나의 방법은 .format

>>> string2 = "{0} {1}".format("Hello", "World")
>>> string2
'Hello World'
>>> 

이것은 암시 적 문자열 리터럴 연결입니다. 문자열로 평가되는 변수 또는 기타 표현식이 아닌 문자열 리터럴에서만 발생합니다. 예전에는 (작은) 성능 차이가 있었지만 요즘에는 틈새 최적화 프로그램이 양식을 본질적으로 동일하게 렌더링해야합니다.


문 3은 두 개의 문자열 식을 연결하여 새 문자열을 만들 때 '+'연산자가 필요한 것처럼 작동하지 않습니다.

스팅 1,2 및 4의 경우 공백으로 구분 된 인접한 리터럴은 서로 다른 인용 규칙을 사용하므로 연결과 동일하게 인쇄 할 수 있습니다.

또한이 두 작업을 실행하는 데 상당한 또는 눈에 띄는 시간 차이가 없습니다.

%%timeit -n 1
s1='ab'
s2='ba'
print(s1+s2)

o / p 가장 느린 실행은 가장 빠른 실행보다 17.08 배 더 오래 걸렸습니다. 이는 중간 결과가 캐시되고 있음을 의미 할 수 있습니다. 루프 당 57.8 µs ± 92.5 µs (7 회 실행의 ± 표준 편차, 각 1 개 루프)

%%timeit -n 1
s3='ab' 'ba'
print(s3)

o / p 가장 느린 실행은 가장 빠른 실행보다 4.86 배 더 오래 걸렸습니다. 이는 중간 결과가 캐시되고 있음을 의미 할 수 있습니다. 루프 당 25.7 µs ± 21 µs (7 회 실행의 평균 ± 표준 편차, 각 1 개 루프)


문 1이 작동하는 동안 문 3이 작동하지 않는 이유는 무엇입니까?

왜냐하면 첫 번째 문장에서 우리는 변수에 상수를 할당하고 있기 때문입니다. 변수 할당은 단일 변수에 여러 상수를 계속 넣을 수있을 정도로 간단하며 할당은 계속 진행됩니다. 용어 "hello""world"같은 유형의 두 상수이다. 그래서 성명은 효과가있었습니다.

다음을 수행하면 SyntaxError

string1 = "Hello" 1

The reason is that we supplied multiple constants in a single variable assignment. This confused python and it thrown it out as an error.

The statement 3 is all about assigning a variable based on two variables. This will produce SyntaxError as python don't know what it can do with 2 variables before assigning it to the variable.

Is there any technical difference such as calculation speed etc. between statement 1 and 2?

Yes. The only technical difference is readability rather than anything else. Readability matters most in Python. For an untrained eye, "hello" "world" might look like the compiler would add the space to the strings. Which is not the case.

However,

"hello" + "world"

is explicit and normal. Nearly always, Explicit is better than implicit.

ReferenceURL : https://stackoverflow.com/questions/18842779/string-concatenation-without-operator

반응형