본문 바로가기

개발

파이썬 활용 꿀팁 및 예제 모음: 개발 생산성을 높이는 10가지 방법 💡

반응형

파이썬은 배우기 쉽고 강력한 기능 덕분에 많은 개발자들에게 사랑받는 언어입니다. 하지만 파이썬의 진정한 힘은 '파이써닉(Pythonic)'한 코드, 즉 간결하고 효율적이며 가독성이 높은 코드를 작성하는 능력에서 나옵니다.

이 글에서는 파이썬 개발 생산성을 획기적으로 높여주는 10가지 꿀팁과 유용한 예제들을 소개합니다. 이 기술들을 익히면 여러분의 코드가 더욱 우아해지고 강력해질 것입니다.

 


1. 리스트 컴프리헨션 (List Comprehensions)으로 코드 줄이기

반복문을 사용하여 리스트를 만드는 흔한 작업을 한 줄로 깔끔하게 처리할 수 있습니다. 가독성도 높고 성능도 뛰어납니다.

Python
 
# 일반적인 for 루프
numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for n in numbers:
    squared_numbers.append(n * n)
print(squared_numbers) # [1, 4, 9, 16, 25]

# 리스트 컴프리헨션 활용
squared_numbers = [n * n for n in numbers]
print(squared_numbers) # [1, 4, 9, 16, 25]

# 조건문 추가도 가능
even_squared = [n * n for n in numbers if n % 2 == 0]
print(even_squared) # [4, 16]

2. collections 모듈로 데이터 처리하기

파이썬의 표준 라이브러리인 collections 모듈은 자료구조를 효율적으로 다루는 도구들을 제공합니다. 특히 Counter와 defaultdict는 매우 유용합니다.

Python
 
from collections import Counter, defaultdict

# Counter: 요소의 개수를 세기
text = "hello world"
counts = Counter(text)
print(counts)
# Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})

# defaultdict: 존재하지 않는 키에 기본값 설정
data = defaultdict(int) # int 기본값 0
data['a'] += 1
data['b'] += 2
print(data) # defaultdict(<class 'int'>, {'a': 1, 'b': 2})
print(data['c']) # 'c'가 없어도 에러 없이 0을 반환

3. f-string으로 문자열 포맷팅하기

파이썬 3.6부터 도입된 f-string은 문자열 내에 변수 값을 직관적으로 삽입하는 가장 현대적이고 강력한 방법입니다.

Python
 
name = "Alice"
age = 30

# f-string 활용
greeting = f"안녕하세요, 제 이름은 {name}이고, 나이는 {age}세입니다."
print(greeting) # 안녕하세요, 제 이름은 Alice이고, 나이는 30세입니다.

# 다양한 포맷팅 기능
pi = 3.141592
print(f"원주율: {pi:.2f}") # 소수점 둘째 자리까지: 3.14

4. enumerate()로 반복문 인덱스 얻기

for 루프에서 인덱스와 값을 동시에 얻고 싶을 때 range(len(list)) 대신 enumerate()를 사용하면 코드가 훨씬 깔끔해집니다.

Python
 
fruits = ['apple', 'banana', 'cherry']

# range(len()) 사용
for i in range(len(fruits)):
    print(f"{i+1}번째 과일: {fruits[i]}")

# enumerate() 사용
for index, fruit in enumerate(fruits):
    print(f"{index+1}번째 과일: {fruit}")

5. zip()으로 여러 리스트 다루기

zip() 함수는 여러 개의 이터러블(리스트, 튜플 등)을 묶어서 동시에 순회할 수 있게 해줍니다.

Python
 
names = ['Alice', 'Bob', 'Charlie']
scores = [90, 85, 95]

for name, score in zip(names, scores):
    print(f"{name}의 점수: {score}점")

# 결과
# Alice의 점수: 90점
# Bob의 점수: 85점
# Charlie의 점수: 95점

6. 딕셔너리 정렬하기

딕셔너리를 정렬할 때는 sorted() 함수와 lambda 함수를 조합하여 키나 값을 기준으로 정렬할 수 있습니다.

Python
 
data = {'apple': 3, 'banana': 1, 'cherry': 2}

# 키(key)를 기준으로 정렬
sorted_by_key = sorted(data.items())
print(sorted_by_key) # [('apple', 3), ('banana', 1), ('cherry', 2)]

# 값(value)을 기준으로 정렬
sorted_by_value = sorted(data.items(), key=lambda item: item[1])
print(sorted_by_value) # [('banana', 1), ('cherry', 2), ('apple', 3)]

7. 제너레이터(Generator)로 메모리 효율 높이기

제너레이터는 모든 값을 한꺼번에 메모리에 올리지 않고, 필요할 때마다 값을 생성(yield)하여 반환하는 함수입니다. 대용량 데이터를 다룰 때 메모리 사용량을 획기적으로 줄일 수 있습니다.

Python
 
# 리스트로 생성: 모든 값을 메모리에 올림
def create_list(n):
    return [i*i for i in range(n)]

# 제너레이터로 생성: yield로 값을 하나씩 반환
def create_generator(n):
    for i in range(n):
        yield i*i

my_list = create_list(10000000) # 메모리 많이 사용
my_gen = create_generator(10000000) # 메모리 거의 사용 X

8. 함수 인자에 *args와 **kwargs 활용하기

함수를 정의할 때 인자의 개수를 미리 정하기 어려운 경우, *args(가변 인자)와 **kwargs(가변 키워드 인자)를 사용하면 유연하게 함수를 설계할 수 있습니다.

Python
 
def print_args(*args, **kwargs):
    print(f"일반 인자들: {args}")
    print(f"키워드 인자들: {kwargs}")

print_args(1, 2, 3, name="Alice", age=30)

# 결과
# 일반 인자들: (1, 2, 3)
# 키워드 인자들: {'name': 'Alice', 'age': 30}

9. walrus operator(:=)로 코드 간결하게 만들기

파이썬 3.8부터 추가된 '바다코끼리 연산자'는 변수 할당과 동시에 조건문을 처리할 수 있게 해줍니다. 코드를 더 간결하게 만들 수 있습니다.

Python
 
# 바다코끼리 연산자 사용 X
line = "Hello World"
if len(line) > 10:
    print(f"문자열이 너무 깁니다. 길이: {len(line)}")

# 바다코끼리 연산자 사용 O
if (n := len(line)) > 10:
    print(f"문자열이 너무 깁니다. 길이: {n}")

10. try-except-else-finally를 이용한 예외 처리

try-except 구문은 오류를 처리하는 가장 기본적인 방법이지만, else와 finally를 함께 사용하면 더욱 견고하고 명확한 예외 처리가 가능합니다.

Python
 
try:
    file = open("my_file.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
else:
    print("파일 읽기 성공!")
    print(content)
finally:
    if 'file' in locals() and not file.closed:
        file.close()
    print("파일 닫기 작업 완료.")
  • try: 예외 발생 가능성이 있는 코드를 실행
  • except: 예외가 발생했을 때 실행
  • else: 예외가 발생하지 않았을 때만 실행
  • finally: 예외 발생 여부와 관계없이 항상 실행

결론

위에 소개된 10가지 팁들은 파이썬 개발자들이 자주 사용하는 효율적인 기술들입니다. 이러한 '파이써닉'한 문법과 표준 라이브러리 활용법을 익히면, 더욱 가독성 높고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 오늘부터 이 팁들을 여러분의 코드에 적용해 보세요!

반응형