기본 콘텐츠로 건너뛰기

라벨이 python인 게시물 표시

[python] getter, setter대신 @property, @setter를 사용하자

파이썬에서는 getter와 setter를 쓰는것을 권장하지 않는다 대신 @property와 @setter키워드가 존재한다. p.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Mung(object):     def __init__(self):         self._mung = 1         def get_mung(self):         return self._mung       def set_mung(self, value):         self._mung = value   mung = Mung() print(mung.get_mung()) mung.set_mung(10) print(mung.get_mung()) cs $python p.py >>> 1 10 기존의 getter와 setter를 쓴다면 위와 같이 사용을 할 것이다. 근데 파이썬에서는 위처럼 쓰는 코드를 권장하지 않는다. p.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Mung(object):          def __init__(self):         self._mung = 1                @property     def mung(self):         return self._mung         @mung.setter     def mung(self, value):         self._mung = value   mung = Mung() print(mung.mung) mung.mung=10 print(mung.mung) cs $pytho

[python] try-except, if ~else, 내장모듈 밴치마킹(benchmarking)

이번에는 성능 테스트를 해보려고 한다. 에러를 발생을 시켜 catch부분에서 처리를 하는 방식과, 조건분기, 내장 모듈 사용이 얼마나 걸리는지 테스트를 하려고 한다. 똑같은 값이 얼마나 있는지 카운팅을 해주는 함수이다. 1 2 3 4 5 6 7 8 9 import  time def  time_check(func):      def  new_func():         start  =  time.time()         func()         result  =  time.time()  -  start          print (result)      return  new_func cs 우선 데코레이터로 만들어질 시간 체크 부분이다. 1 2 3 4 5 6 7 8 9 10 #키가 있는지 없는지 검사 후 카운팅 @time_check def  frequency_test1():     Dictionary = dict()      for  i  in   range ( 10000 ):          if  i  in  Dictionary.keys():             Dictionary[i] + = 1          else :             Dictionary[i] = 1      return  Dictionary cs 1 2 3 4 5 6 7 8 9 10 #에러 발생후 카운팅 @time_check def  frequency_test2():     Dictionary = dict()      for  i  in   range ( 10000 ):          try :             Dictionary[i] + = 1          except  KeyError:

[python] python에서 namespace를 써야하나??

파이썬에서는  @staticmethod 를 이용하여 네임스페이스처럼 구현을 할 수가 있다 근데 파이썬에서 꼭 네임스페이스를 써야하나라는 생각이 들기시작 했다(자고 일어나다가 왜 이런생각이 난거지 참....) namespace란?  - namespace란 함수 이름이 같아도 쓸수 있게 함수마다 공간을 할당을 해주는 것을 의미한다. 네임스페이스를 쓰는 목적만 보면 오 좋은거네? 라고 생각을 할 수가 있다. 그런데 네임스페이스를 쓰는 c++과 python의 모듈 혹은 헤더파일이 작동 방식이 매우 다르다. c++ 헤더파일 작동 방식 그리고 namespace (IDE를 설치 되어있지 않아 우분투에서 vim + gcc로 테스트 진행 - 도커를 이러려고 설치한건 아닌데 아무쪼로 잘 쓰는중 ㅋㅋㅋㅋㅋㅋㅋ) 우선 c, c++에서 헤더파일이 어떻게 작동하는지 알아보겠다. 1 2 3 4 5 6 #include   < stdio.h >   int  main( void ){       printf ( "hello world\n" );       return   0 ;  } cs 프로그래밍을 배웠으면 누구나 다 쳐봤다는 hello world! 해당 print부분을 헤더로 분할을 해보겠다. test.cpp 1 2 3 4 5 6 7 8 9 #include   < stdio.h > #include   "pjt.h" int  main( void ){          printf ( "hello world\n" );         show();          return   0 ; } Colored by Color Scripter cs pjt.h 1 void  show()

[python] how to install python on ubuntu

$ sudo apt-get update ; sudo apt-get upgrade $ wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz #python3.5.2 다운 $ tar xvf Python-3.5.2.tgz # 압축풀기 $  cd Python-3.5.2              # 디렉토리 이동 $  ./configure                   # makefile 생성 $  make                         #python코드 컴파일 $ s udo make install            # 설치

[python] aiohttp를 활용하여 서버를 만들어 보자

aiohttp Framework Project 생성 python에서는 다양한 서버프레임 워크가 존재한다. 그중 하나로 aiohttp에 대해서 다뤄보고자 한다.(해당 문서는 작성자인 멍개님에게 저작권이 있습니다.) aiohttp는 가벼우면서 빠르게 짤 수 있다. node.js의 express generator처럼 기본 구조를 잡아주는 것을 찾지 못하여 기본 뼈대를 만들었다. 서버를 시작하기 앞서 환경셋팅 aiohttp라는 프레임워크를 사용할거이기 때문에  aiohttp 라는 모듈을 설치를 해준다. 또한  ayncio  모듈도 설치를 해준다. 로그를 찍기 위해  logging  모듈도 설치해준다. DB 모듈은 개인 성향에 맞추어서 설치를 해준다.(DB 모듈에 대해서는 문서 아래부분에서 좀더 자세히 설명하겠다.) (orm을 쓸경우  sqlalchemy 가 대표적이고 row query를 쓴다면  pymysql 이나  MySQLdb 가 대표적이다.) 모듈설치 및 python 설정 python3.5 설치 $ sudo apt-get update ; sudo apt-get upgrade $ wget  https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz  #python3.5.2 다운 $ tar xvf Python-3.5.2.tgz   # 압축풀기 $ cd Python-3.5.2              # 디렉토리 이동 $ ./configure                   # makefile 생성 $ make                         #python코드 컴파일 $ sudo make install            # 설치 빠른 시일에 virtualenv를 활용하여 파이썬 환경, 모듈의 의존성 문제를 해결하겠다. 모듈설치 requirements.txt내부에 있는 모듈을 한번에 설치를 해준다. 에러가 뜨지 않는다면 정상적으로 설치가 완료