본문 바로가기

프로그램/Python

파이썬 생존 안내서 내용 요약







인터넷에 '파이썬 생존 안내서' 라는 파이썬을 접하기에 매우 좋은 슬라이드가 있어


내용의 극히 일부분만을 발췌하여 올립니다.


내용 요약에 포함되지 않은 유익한 내용들도 매우 많기 때문에 읽어보는 것을 권합니다.


* 참고 : 페이지가 700장이 아니라 내용 스크립트 때문에 700 장으로 보이는 것이기 때문에 읽는데 많은 시간이 걸리지 않습니다.




파이썬 생존 안내서 정리



<파이썬의 특징>

import this

class Example(object):
   pass

def example():

   return Example()


print 'Hello, world'

모듈, 클래스, 메소드 등을 가지고 있으며 메소드 내부가 아니라도 함수 실행이 가능함.


for x in numbers:

   if 2< x <4:

       break

else:

   print 'not found' 

부등호를 숫자 양 옆에 바로 쓸 수 있으며

조건문 뿐만 아니라 루프에도 else 구문을 달 수 있음. 




<Ref. Dynamic Typing is NOT Weak Typing>


파이썬은 동적인 언어이면서 type definition이 약하지 않은 언어임.


라이브러리는 pip를 이용하여 간편하게 설치할 수 있다. 




용도 별로 쓰이는 파이썬 패키지들 (또는 명령어)


데이터 분석 : Jupyter, Pandas, PySpark

과학계산 : SciPy, NumPy, matplotlib

기계학습 (Theano, TensorFlow)

웹 : Flask, Django, Requests(RESTful을 구현할때 매우 편함)

터미널 앱 : Click, (표준 라이브러리: argparse) / TUI] Urwid (표준 라이브러리 : curses)

데스크톱 자동화 : SikuliX, AutoPy

유닛 테스트 : pytest (기본 라이브러리 : unittest)

소스코드 배포 : Fabric, fabtools

메모리 누수 검사 : objgraph

코드 컨벤션 검사 :  flake8 명령

코드 실행시간 측정 : python -m timeit -s [한번 실행할 코드] [벤치마킹할 코드]

                            python -m [profile, cProfile] [파이썬 파일]

                            python -m yappi [파이썬 파일] (스레드별로 측정 가능함)(cPython only)

>관련 자료는 http://awesome-python.com/에서 찾아볼 수 있음.



파이썬 2와 3은 완벽히 호환되지는 않지만,

3의 기능을 2에서 활용하기 위하여 __future__ 모듈을 이용하여 사용할 수 있기도 하다

(e.g. from __future__ import unicode_literals)

또한 같은 코드로 2와 3을 함께 지원하기 위하여 six 모듈을 사용



파이썬은 본질적으로 GIL(Global Interpreter Lock)때문에 바이트 코드가 여러 스레드에서 실행이 불가능함.

파이썬을 비동기적으로 구현하는 방식은 크게 3가지가 있음.

- 멀티 프로세싱 : gevent

- 멀티 스레딩 : eventlet

- asyncio : Twisted



파이썬 코드의 표준 컨벤션 PEP8

- 4칸 소프트탭

- 79칸 제한

- import 순서

- snake_case, PascalCase



파이썬은 함수 실행을 도중에 멈췄다가 재개시킬 수 있는 제너레이터가 있음.

return 대신 yield를 이용하면 함수 실행 도중에 값을 리턴할 수 있으며 추가적으로 함수 실행도 가능.


def only_odds(nums):

     for n in nums:

        if n%2 ==1:

            yield n

----------------------------------

>>> odds = only_odds(range(100))

>>> next (odds)

1

>>> next(odds)

3


----------------------------------

seq = xrange(1000000)

seq = only_odds(seq)

seq = (x **2 for x in seq)


yield는 주기적으로 도는 프로그램(e.g. AI)와 같은 프로그래밍을 할 때 매우 편리함.


enemy = player.nearest_player()

while player.alive() of enemy.alive() :

    player.move_to(enemy)

    player.attack(enemy)

    yield 


기존 이터레이터를 사용하였다면, 다음 틱에 정보를 넘기기 위해서는 전역변수를 사용하여야 하지만,

이터레이터를 사용함으로써 지역변수를 계속 사용할 수 있는 것을 알 수 있음.






<주로 하는 실수>


with문 없이 파일을 열고나서  안 닫는 경우


f = open('logs')

logs = f.read() 

 -->

with open('logs') as f:

    logs = f.read()


인자 기본값으로 가변 객체를 지정 할 때에

 def make_node(children=[]):

    return Node(children)

 -->

def make_node(children=None):

    if children is None:

        children = []

    return Node(children)


Exception 코드 : 파이썬의 경우 BaseException이 최상위 exception임.



스핀락 코드 : Event.wait() 나 세마포어와 같은 함수를 이용하여 불필요하게 동작하는 코드들을 없애야 함.





< 마무리 >


파이썬은 많은 오픈소스 코드, 패키지와 더불어 커뮤니티가 잘 생성되어 있는 언어임.

이러한 오픈소스의 도움을 얻는다면 효율적이고 빠른 개발이 가능할 것임.