본문 바로가기
개발/Python

[파이썬, Python] 코드 최적화 예시 총정리

by 꾀돌이 개발자 2024. 7. 14.
반응형

 

코드 최적화 구현하기

 

 

- 파이썬 코드 최적화는 성능을 개선하고 효율성을 높이는 중요한 작업입니다.

- 특히 대규모 데이터 처리나 성능이 중요한 애플리케이션에서 유용합니다.

 

 

1. 리스트 컴프리헨션 사용

  • 리스트 컴프리헨션은 기존의 for 루프를 대체하여 코드를 더 간결하고 빠르게 만들 수 있습니다.
# Before
squares = []
for x in range(10):
    squares.append(x**2)

# After
squares = [x**2 for x in range(10)]

 

 

2. 제너레이터 사용

  • 제너레이터는 메모리를 절약하고 큰 데이터 집합을 처리할 때 유용합니다. (리스트 컴프리헨션 표현식 [ ]과 제너레이터 표현식 ( )의 차이)
# Before
squares = [x**2 for x in range(10**6)]

# After
squares = (x**2 for x in range(10**6))

 

 

3. set과 dict 사용

  • 리스트 대신 set과 dict를 사용하면 검색과 삽입 속도를 크게 개선할 수 있습니다.
# Before
numbers = [1, 2, 3, 4, 5]
if 3 in numbers:
    print("Found")

# After
numbers = {1, 2, 3, 4, 5}
if 3 in numbers:
    print("Found")

 

 

4. 내장 함수 활용

  • 내장 함수는 최적화되어 있어 더 빠르게 작동합니다. 예를 들어, sum() 함수를 사용하여 리스트의 합을 구합니다.
# Before
total = 0
for x in range(1000):
    total += x

# After
total = sum(range(1000))

 

 

5. join() 메서드로 문자열 결합

  • 여러 문자열을 결합할 때 + 연산자 대신 join()을 사용하면 더 효율적입니다.
# Before
strings = ["Hello", "World"]
result = ""
for s in strings:
    result += s

# After
result = "".join(strings)

 

 

6. 함수 호출 최소화

  • 반복문 내에서 함수 호출을 줄이면 성능을 개선할 수 있습니다.
# Before
def compute(x):
    return x**2

result = []
for i in range(1000):
    result.append(compute(i))

# After
result = [i**2 for i in range(1000)]

 

 

7. 슬라이싱 사용

  • 슬라이싱을 이용하여 리스트의 일부분을 빠르게 처리할 수 있습니다.
# Before
numbers = [1, 2, 3, 4, 5]
first_two = [numbers[0], numbers[1]]

# After
first_two = numbers[:2]

 

 

8. 다중 할당 사용

  • 다중 할당을 통해 변수에 값을 할당하는 코드를 간결하게 만들 수 있습니다.
# Before
a = 1
b = 2
c = 3

# After
a, b, c = 1, 2, 3

 

 

9. 조건문 단축 평가

  • and, or 연산자를 사용하여 조건문을 최적화할 수 있습니다.
# Before
if condition1:
    if condition2:
        result = True

# After
if condition1 and condition2:
    result = True

 

 

10. Cython 사용

  • Cython을 사용하여 파이썬 코드를 C로 컴파일하면 성능을 크게 향상시킬 수 있습니다.
# Example of a simple Cython function
# Save this code in a file named example.pyx
def sum_up_to(int n):
    cdef int i
    cdef int total = 0
    for i in range(n + 1):
        total += i
    return total

 

반응형