파이썬 문자열 객체는 불변이다. 따라서 두 개의 문자열을 연결하기 위해 + 연산자를 사용할 때마다 새로운 문자열이 생성된다. 많은 문자열을 추가해야 하는 경우, + 연산자를 사용하면 최종 결과가 나오기 전에 많은 임시 문자열이 불필요하게 생성된다.
파이썬 문자열 추가
문자열을 ‘n’번 연결하는 함수를 살펴보자.
def str_append(s, n):
output = ''
i = 0
while i < n:
output += s
i = i + 1
return output
이 함수를 + 연산자의 사용법을 보여주기 위해 정의하고 있다. 나중에 timeit 모듈을 사용하여 성능을 테스트할 것이다. 단순히 문자열을 ‘n’번 연결하려면 s = 'Hi' * 10
을 사용하면 된다.
문자열 추가 작업을 수행하는 또 다른 방법은 리스트를 생성하고 문자열을 리스트에 추가하는 것이다. 그런 다음 문자열 join() 함수를 사용하여 이들을 함께 병합하여 결과 문자열을 얻는다.
def str_append_list_join(s, n):
l1 = []
i = 0
while i < n:
l1.append(s)
i += 1
return ''.join(l1)
이러한 방법들이 예상대로 작동하는지 확인하기 위해 이들을 테스트해보자.
if __name__ == "__main__":
print('Append using + operator:', str_append('Hi', 10))
print('Append using list and join():', str_append_list_join('Hi', 10))
# 위의 방법들은 timeit 모듈을 사용하여 성능을
# 확인하기 위해 만들어진 것이므로, 이 경우에는
print('Append using * operator:', 'Hi' * 10)
출력:
Append using + operator: HiHiHiHiHiHiHiHiHiHi
Append using list and join(): HiHiHiHiHiHiHiHiHiHi
Append using * operator: HiHiHiHiHiHiHiHiHiHi
Python에서 문자열을 추가하는 가장 좋은 방법
I have both the methods defined in string_append.py
file. Let’s use timeit module to check their performance.
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append("Hello", 1000)'
1000 loops, best of 5: 174 usec per loop
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append_list_join("Hello", 1000)'
1000 loops, best of 5: 140 usec per loop
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append("Hi", 1000)'
1000 loops, best of 5: 165 usec per loop
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append_list_join("Hi", 1000)'
1000 loops, best of 5: 139 usec per loop
요약
문자열이 몇 개 없다면, 그 어떤 방법을 사용하여도 상관없습니다. 가독성 측면에서는 + 연산자를 사용하는 것이 문자열이 적은 경우 더 좋아보입니다. 그러나 많은 양의 문자열을 추가해야 한다면, 리스트와 join() 함수를 사용해야 합니다.
GitHub 저장소에서 완전한 파이썬 스크립트와 더 많은 Python 예제를 확인할 수 있습니다.
Source:
https://www.digitalocean.com/community/tutorials/python-string-append