ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 언어에 대한 참고사항들
    Programming & Machine Learning/Python X 머신러닝 2018. 5. 23. 00:47

    github 자료와 메모 자료들을 정리하던 도중, CS 관련 지식들을 정리해놓은 자료들을 발견했다.

    아주 기초적이고 쉬운 내용들이지만, 복습 겸 블로그에 다시 정리하고자 한다.


    이 중 파이썬 언어와 관련된 참고사항들을 정리할 것이다.





    1. 파이썬의 네이밍 원칙


    어느 언어들이 그렇듯이, 파이썬 역시 네이밍 원칙 즉 code convention이 존재한다. 간략한 내용은 다음과 같다.

     

    하나의 알파벳으로 변수의 이름을 지어서는 안된다.

    모듈 : 모듈 이름은 짧아야 하고, 소문자여야만 한다. 문장이 길어지는 경우 가독성을 위한 언더스코어 사용은 허용된다.

    패키지 : 무조건 소문자여야 한다.

    클래스 이름 : CapWords 형식을 따른다. 첫글자는 대문자로 한다.

    - exception : 클래스와 동일하다. Error 뒤에 붙여준다.

    전역변수 사용은 권장하지 않지만, 불가피한 경우 소문자로만 네이밍 한다. 역시 언더스코어도 허용된다.

    함수 이름 : 소문자가 원칙이지만 언더스코어로 가독성을 높이는 것을 허용한다.

    함수와 메소드의 인자 : 메소드 인스턴스의 첫번째 인자는 무조건 self이다. 클래스 메소드는 cls이다. 예약키워드 등과 겹치는 경우, 인자의 뒤에 언더스코어를 붙인다.

    메소드와 인스턴스의 이름 : 함수 이름과 동일하다. 하지만 public 아닌 인스턴스의 경우는 언더스코어로 시작한다.

    상수의 이름 : 대문자와 언더스코어로 구성해야 한다.






    2. 파이썬에서 "lambda" 런타임에 생성해서 사용할 있는 익명 함수이다.




     



    3. 파이썬의 장점


    개발속도가 최고의 장점이다. 이건 반박의 여지가 없다. 개발속도 외에도 여러가지 장점이 있다. 직관적이고 쉬운 자료구조형을 예로 들수 있고(속도는 별로다), 분산처리 시스템과 궁합이 잘맞는 언어이다. 또한 수학이나 통계 라이브러리가 매우매우매우 강력해서 데이터 분석 언어로써 최강자의 자리를 넘보고 있고(매트랩은 용도에 한정이기 때문에), 웹과 서버, 게임개발 분야에서 주로 사용되는 언어이다. 구글의 지메일 / 그룹스 / 구글맵 등의 서비스의 백엔드가 파이썬이다.

     

    이뿐만이 아니다. 파이썬은 C계열 언어와 매우 궁합이 좋기 때문에 종종 언어가 혼합되어 사용된다. 성능을 위한 코어부분만 C/C++ 대체하는 형태.






    4. 파이썬의 특징

     

    파이썬2에서는 기본 문자열이 바이너리 문자열로, 1글자에 1바이트만을 차지했지만 3에서는 문자열이 항상 유니코드이기 때문에 4바이트를 차지한다. 100길이의 아스키 문자열을 위해 400 램을 사용한다는 . 이러한 문제를 해결하기 위해 문자열 객체중 가장 많은 바이트를 사용하는 문자를 기준으로 문자가 사용될 공간을 지정하는 방법을 사용하고 있다.

     

    또 다른 파이썬의 특징으로, 반복 가능한 객체(iterable)라는 강력한 기능을 제공한다는 것이 있다. 집합, 문자열, 리스트, 튜플, 딕셔너리, 함수 등을 for 구문에서 반복이 가능하도록 해준다. Yield 키워드로 함수 반복을 가능하게 해주는 기능은 백미다.

     

    (참고 : 파이썬은 C 구현되어 있음. 다른 구현체와 비교될때는 CPython이라고 불림)

     





    5. Stackless Python


    python 구현할때 함수의 호출 스택을 C언어의 호출스택을 그대로 가져와버림. 그래서 파이썬 메모리와 관계없이 스택이 가득차는 순간 스택오버플로가 발생해버린다. 이는 파이썬 프로그램에서의 호출 스택을 마음대로 가지고 놀수 없고, 코루틴을 이용할 없게되는 치명적인 문제점을 말한다. 이를 해결하기 위해선 CPython 소스코드 자체를 수정해서 스택부분을 공사해야 하고, 결과로 나온것이 Stackless Python이다. 3.4 이후버전부터는 문제가 자체적으로 해결되서 나오는것 같다.

     

    또한 파이썬은 JIT 컴파일러(필요한 부분을 즉석에서 컴파일하고 재사용하는 방식) 없다. 보통 인터프리터 언어는 JIT 컴파일러를 통해 하이브리드 방식을 사용하여 성능이슈를 해결하고자 하지만, 파이썬은 JIT 컴파일러가 없다.




     


    6. 멀티 스레딩 문제


    멀티 스레딩 문제 : 파이썬은 스레딩을 위해서 GIL(Global Interpreter Lock) 도입했는데, 여러 스레드에서 사용되는 자원을 글로벌 락으로 관리한다는 것이다. 이는 CPU 코어의 개수와 상관없이 하나의 스레드밖에 돌릴수 없다는 것을 의미한다. 만약 코어를 억지로 2 이상으로 돌린다고 하면, 하나의 락에 접근하는 스레드는 하나인데, 하나의 스레드를 CPU 2 이상으로 돌린다는 것이 된다. 이경우 싱글코어보다도 성능이 낮아진다.

     

    이런 문제점 때문에 파이썬에서는 병렬처리를 스레드보다는 다중 프로세스로 처리하는 식으로 발전되고 있다.

     

    참고 : asyncio 파이썬은 asyncio라는 비동기 프로그래밍 프레임워크를 가지고 있다. 프레임워크는 스레딩의 문제를 해결해준다. 콜백과 제너레이터 개념을 융합하여 이벤트 루프를 사용한다. 이는 io 대기하는 동안 애플리케이션 레벨에서 컨텍스트 스위치 관리가 가능하다는 것이다. CPU 스위칭이 없기 때문에 매우 효율적이다.

     

     


    참고 : 나무위키 파이썬


    댓글

분노의 분석실 Y.LAB