프로그램/Python

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

naudhizb 2017. 3. 25. 21:47
반응형







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


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


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


* 참고 : 페이지가 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() 나 세마포어와 같은 함수를 이용하여 불필요하게 동작하는 코드들을 없애야 함.





< 마무리 >


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

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




반응형