본문 바로가기
Pyhton

파이써닉은 뭔가요? _ Pythonic

by Django_ 2020. 4. 24.
반응형

파이썬은 입문용으로 배울 수 있고 독학으로도 이해할 수 있을 만큼 읽기도 쉽고 이해하기도 쉬운 프로그래밍 언어라는 거 건 이미 아시고 이 블로그에 오셨다고 생각이 듭니다. (상대적으로 쉽다는 이야기입니다)

무엇보다 같은 기능도 더욱 짧은 코드로 작동할 수 있도록 만들 수 있습니다.

그리고 파이썬 프로그래밍을 하다 보면 '이렇게 코딩해도 동작 하나?' 싶은 게 되는 경우가 종종 있습니다~

그렇다 보니 읽기도 편하고 가독성이 높은 코드를 일컬어 파이써닉스럽다고 표현합니다 

 

예를 들어 아래 이미지와 같은 0부터 9까지 출력하는 부분을 만든다고 했을 때

위 내용을 C++로 진행한다면 이런 내용입니다.

#include <iostream>
using namaspace std;

int main(){
    int num = 0;
    while ( num < 10){
    	cout << " num = " << num << endl;
        num++;
    }
    return 0;
}

뭔가 글씨가 많습니다. out이면 out이지 cout은 뭐고 end면 end 지 endl으로 프로그래밍 언어를 모른다면 읽어도 이해하기 어려운 부분이 많습니다.

 

파이썬은 그냥 적어도 두줄로 작성이 끝나게 됩니다.

for num in range(0,10):
     print(f'num= {num}')

만약 더 코드를 줄이고 싶다면 아래처럼 한 줄로도 가능하게 됩니다.

[print(f'num={num}') for num in range(0,10)]

꼭 코드의 줄 수가 성능을 좌우하는 건 아닙니다. 내부에 어떻게 돌아가냐가 성능을 좌우하는 것입니다.

메모리를 어떻게 할당하고 관리하고 동작하는지가 성능을 결정하게 됩니다.

파이썬의 경우 자동으로 관리해주지만 그 자동에 의존하면 성능이 느려지는 것을 경험하실 수 있기 때문에

항상 성능을 체크해보는 것이 좋은 것 같습니다

 

100만 개의 루프를 돌며 리스트를 만든다고 가정을 해보겠습니다.

import time
start = time.time()
num_list = []

for num in range(0,1000000):
    num_list.append(num)
    
end = time.time()
the_time = end - start
print(the_time)

# 0.20942091941833496

''' 
파이썬의 경우 .append시 메모리를 예상하여 예를들어 2 > 4 > 8 > 16 식으로 
메모리를 미리 할당하기 때문에 메모리 낭비와 성능저하가 존재합니다. 
'''
import time
start = time.time()

num_list = [num  for num in range(0,1000000)]

end = time.time()
the_time = end - start
print(the_time)


# 0.08634305000305176

만약 100만 번을 돌면서 연산이나 다른 작업을 해야 한다면 lambda 표현식과 map() 함수를 사용하시면 뛰어난 성능을 경험하실 수 있습니다~

하지만 성능과 속도에 너무 빠지면 오히려 진행이 느려질 수 있습니다. 

파이썬의 장점은 우선 원하는걸 빠르게 구현하는데 있다고 생각합니다.

1000분의 1초가 생사를 좌우하는게 아니고 프로덕트 단이 아니라면 성능 조금 빠르게 하겠다고 일주일 동안 0.5초 성능의 코드를 찾는것보단 빨리 5분 코딩하고 5초 기다리는게 낫겠죠?ㅎ
(5분이면 작성할걸 성능과 코드 줄 수에 꽂혀 일주일 동안 삽질해본 경험이 있습니다)

 

파이썬 천재분들이 정해둔 좋은 코드의 기준도 있으니 한번 확인해보세요 PEP 8

반응형

댓글