데이터 공부/Python

Python 클린 코드(Clean Code) 작성 방법 정리 및 고찰 (1)

한소희DE 2022. 9. 6. 23:51

더 나은 파이썬 코드를 작성하기 위한 11가지 팁과 요령이라는 유튜브를 시청했다.

시청한 내용에 대해서 정리를 해보고자 한다.

 

 

1. range(len(x)) 를  enumerate 로 변경하자.

만약 idx와 item 으로 모두 추적할 경우, enumerate 를 사용하는 것이 간결하고 좋다.

range를 쓰면 len 함수를 추가로 불러와야 하고, 각 원소의 자료구조의 인덱스로 직접 접근해야 한다.

하지만 enumerate는 인덱스와 item을 하나의 튜플 단위로 묶어 출력하기 때문에, 훨씬 pythonic 하다.

 

변경 전 코드

data = [1,2,3,4]

for i in range(len(data)):
	if data[i]<0:
    	data[i]=0
print(data)

 

변경 후 코드

data = [1,2,3,4]

for idx, num in enumerate(data):
 if num<0:
 	data[idx]=0
    
print(data)

 

 

 

2. for 루프 대신 list comprehension 을 사용하자.

만약 루프를 이용해서 list 에 추가를 해야 하는 경우, list comprehension 을 사용하는 것이 더 간단하고 pythonic 하다.

 

변경 전 코드

squares = []
for i in range(10):
	squares.append(i*i)
   
print(squares)

 

변경 후 코드

squares = [i*i for i in range(10)]
print(squares)

 

 

3. sort 시 리스트 대신 튜플과 사전 정렬 알고리즘을 사용하자.

만약 소팅이 필요할 경우, 내장된 정렬 방법(오름차순)으로 복잡하게 구현하는 경우가 있는데, 이를 튜플 (또는 사전순 정렬 알고리즘)을 사용하면 훨씬 간단하다.

* 튜플은 리스트에 비해 더 적은 메모리를 필요로 하고, 속도가 빠르다.

 

변경 전 코드

data = [1,2,4,5,3]

sorted_data = sorted(data, reverse=False)
print(sorted_data)

 

변경 후 코드 (1) 튜플

data = (1,2,4,5,3)

sorted_data = sorted(data, reverse=False)
print(sorted_data)

 

 

 

 

4. set 을 활용해 unique value를 저장하자.

 

만약 데이터셋에 인입된 순서가 고려대상이 아니라면, set 을 활용해 unique value 를 저장하자.

이는 두 집합에 대한 교집합 or 차집합을 반환하거나, 홀수 or 짝수를 반환할 때 등에 활용할 수 있다.

 

변경 전 코드

my_list= [1,2,2,2,3]
my_set = set(my_list)
print(my_set)

 

변경 후 코드

set_data = {1,2,3}
print(set_data)

 

 

 

5. Generator 사용해서 메모리를 아끼자.

제네레이터를 사용하면 메모리를 아낄 수 있다.

제네레이터란, iterator 를 생성해주는 함수를 의미한다. 제네레이터에 대한 설명은 아래를 참조하자.

https://wikidocs.net/16069

 

39. Generator(제네레이터)

## 1. Generator란? - generator : iterator를 생성해주는 함수, 함수안에 yield 키워드를 사용함 - genrator 특징 - ite ...

wikidocs.net

 

 

변경 전 코드 (size 확인)

import sys

my_list = [i for i in range(10000)]
print(sum(my_list))
print(sys.getziseof(my_list), "bytes")

 

변경 후 코드 (size 확인)

import sys

my_gen = (i for i in range(10000))
print(sum(my_gen))
print(sys.getziseof(my_gen), "bytes")

 

 

 

 


 

 

 

내가 공부한 유튜브 링크는 아래와 같으며, 이어서 '6-11번 & 고찰 내용'은 다음 포스팅에서 다뤄보도록 하겠다.

 

https://www.youtube.com/watch?v=8OKTAedgFYg