Languages & Frameworks/Python
[Python] 파이썬 버전, 패키지 관리
2020.10.10 : Languages & Frameworks/Pythonpyenv / venv / virtualenv / conda 비교 pyenv macos만 지원. 했었는데 요즘은 어떤지 모르겠네. venv python에서 기본 모듈로 지원 docs.python.org/ko/3/tutorial/venv.html python에 딸려 있는 모듈이라서 현재 시스템에 설치되어 있는 버전의 python을 기반으로 패키지 가상화 환경 제공 그니까 다른 버전을 쓰고 싶다면 그 버전을 일단 설치해서 python해당버전 -m venv ``` python3 -m venv {venv_path} ``` virtualenv -p 옵션으로 파이썬 버전을 지정할 수 있는데, 현재 시스템에 설치되어 있는 파이썬 경로를 입력해야 하는거라서 결국 venv와 똑같다. 그니까, 새로운 버전의 파이썬을 알아..
[python] 사용하면 좋은 패턴들
2019.02.11 : Languages & Frameworks/Python다형성을 쓰고 싶다면? abc 클래스python에 interface는 없지만 abstract base class가 있다.https://docs.python.org/ko/3/library/abc.html근데 메서드 명만 같으면 되고, 파라미터는 강제하지 않음. 근데 어차피 다형성 쓸거라면 파라미터도 맞춰주어야 한다. Python Singletonhttps://stackoverflow.com/questions/6760685/creating-a-singleton-in-python .으로 접근할 수 있는 딕셔너리```pythonclass dotdict(dict): def __getattr__(self, name): return self[name]```https://stackoverflow.com/question..
헷갈리는 모듈 스코프 변수, 전역 변수처럼 쓸 수 있을까? - 아니. class level 변수를 쓰자.
2019.02.04 : Languages & Frameworks/Python요약 : 전역 변수, 모듈 스코프 변수 보다는 class level 변수를 사용하자. main.py```pythonfrom g_val import *print("1 ", a)print(id(a))a = Falsedelay()print("3 ", a)print(id(a))```g_val.py```pythonimport timea = Truedef delay(): print("2 ", a) print(id(a))``````pythonλ python main.py1 main True1407342495522082 g_val True # False로 변경되어야 할 것 같지만, 그렇지 않다.1407342495522083 main False140734249552240```처음에는 main.py에서 a라는 변수에 접근..
[python] pdb : 디버깅
2018.11.12 : Languages & Frameworks/Pythongdb처럼 쓰면 된다. ```python(Pdb) n # 함수 진입 안하고 한줄 실행(Pdb) s # 함수 진입 하면서 한줄 실행(Pdb) l 10 def mkList2(): 11 result = [value for value in range(1000)] 12 return result 13 14 15 -> print("mkList1 : ", timeit(mkList1, number=1000), "s") 16 print("mkList2 : ", timeit(mkList2, number=1000), "s") 17 [EOF] (Pdb) b 16 Breakpoint 1 at d:\source\rapts\test.py:16 (Pdb) c mkList1 : 2.6512367244046393 s > d:\source..
[python] 성능 측정, 프로파일링(profiling)
2018.11.12 : Languages & Frameworks/Python근데 요즘은 PyCharm같은 IDE에서도 지원한다. 상단에 Run, Debug 아이콘 옆에 보면 프로파일링 다양하게 지원함. python 기본 내장 라이브러리benchmarking 목적 : timeitprofiling 목적 : cProfile근데, 시스템 함수까지 다 출력되어 보기 불편하고 복잡하다.``bash python -m cProfile -s cumulative file.py`` 진짜 간단하게 함수의 수행 시간을 측정하고 싶을 때 : timeit```pythonfrom timeit import timeit def mkList1(): result = [] for value in range(1000): result.append(value) return result def mkList2(): resu..
[python] socket
2018.11.10 : Languages & Frameworks/Python2017/08/25 - [Coding Syntax/etc] - Socket programming Tips socket 객체에서 로컬 (주소, 포트) 리모트 (주소, 포트) 가져오기accept 할 때 addr을 별도로 저장할 필요가 없다. ``py class SocketType`` 에 정의되어 있다.```pythonsock.getsockname() -- return local address('192.168.0.2', 31234)sock.getpeername() -- return remote address [*]('192.168.110.131', 6627)``` 그냥 socket.connect() 보다 socket.create_connection()https://docs.python.org/3/library..
[python] Flask
2018.11.05 : Languages & Frameworks/Pythonhttp://flask.pocoo.org/docs/1.0/quickstart/#variable-rules http://jinja.pocoo.org/docs/2.10/templates/ 컨텍스트 전역 변수수신한 HTTP request 정보에 접근하기 위해서 컨텍스트 전역 변수를 사용한다.이런 정보들을 리퀘스트를 수신할 때 마다 뷰 함수의 인자로 넘기도록 해도 되는데, 쓸데없이 인자를 많이 가지고 있게 되는 것을 피하기 위해 플라스크는 이를 전역 변수 형식으로 제공한다.근데 실제 전역 변수는 아니다. 멀티스레드 환경에서 못쓰니까. `` request`` 변수가 전역변수 처럼 동작하기는 하지만 실제로는 스레드들은 각각 다른 오브젝트를 처리하게 된다. 컨텍스트는 어플리케이션 컨텍스트/리퀘스트 컨텍스트로 나눌 수..
[python] docstring, 문서화
2018.10.15 : Languages & Frameworks/Pythondocstring 작성 포맷https://stackoverflow.com/questions/3898572/what-is-the-standard-python-docstring-formatgoogle style은 다음과 같은데 타입 적는게 :가 아니라 괄호 안에 들어가서 마음에 안들고, 들여쓰기 때문에 가로축도 많이 차지하고, VSCode에서 힌트 팝업으로 보여줄 때도 bold나 글꼴 크기같은게 안예쁘게 들어간다.```pyArgs: path (str): 설명Returns: int: 설명```Sphinx와 잘 붙는건 reST 스타일인데, ``py :param v1:``과 ``py :type v1:``을 따로 적어주어야 한다는 점이 마음에 들지 않고 가독성도 썩 좋지 않은 것 같다.가독성은 Numpydoc 스타..
[python] @property, getter setter, private 필드
2018.08.07 : Languages & Frameworks/Python프로퍼티 지정 protected로 만들거면 `` _``, private으로 만들거면 `` __`` 프로퍼티는 일반 변수와 같이 명명하는게 통일성 있다. 메서드지만 외부에서는 변수처럼 보여야 하니까. property() 사용하는 방법도 있으나 decorator 사용하는 방법이 나아보인다. lock 변수를 사용할 때 좋은 듯 ```python @property def running_flag(self): with self.__running_flag_lock: flag = self.__running_flag return flag @running_flag.setter def running_flag(self, value): with self.__running_flag_lock: self.__running_flag ..
[python] time, date
2017.11.12 : Languages & Frameworks/Pythontimeouthttps://pypi.python.org/pypi/timeout-decorator time```pythontime.time() #UTC 기준 초단위 실수형 리턴time.localtime() #초단위 실수형 리턴값을 연,월,시 등의 time.struct_time(투플)로 리턴time.asctime() #time.struct_time을 보기 좋은 형태로 리턴time.ctime() == time.asctime(time.localtime(time.time())) time.strftime('형식 포맷 코드', time.localtime(time.time()))time.sleep()``` date```python>>> import datetime>>> datetime.datetime.now()date..
[python] File IO open 함수 및 내장함수
2017.09.22 : Languages & Frameworks/Pythonopen 함수```python>>> fd = os.open("./f", os.O_RDWR) >>> fd8>>> fdo = os.fdopen(fd, "wb")>>> fdo>>> fdo2 = open("./f", "wb")>>> fdo2`````python Built-in open("file name") return file object````python os.open("file name") return fd````python os.fdopen(fd) return file object``그래서, ``python Built-in open("./f") == os.fdopen(os.open("./f"))`` 이다. 내장함수```pythonall() #iterable을 입력받아 요소들 중 거짓이 하나도 없으면 Tr..
[python] pyplot.matplotlib
2017.09.13 : Languages & Frameworks/Pythonmatplotlib그래프를 그리는 라이브러리다. matplotlib의 pyplot모듈을 이용한다.룩이 좀 구리지만 기능 자체는 꽤 쓸만하다. x값 만들기```pythonx = np.arange(1, 7, 1) # 1부터 7까지 1의 간격으로 숫자 생성.[1 2 3 4 5 6]x = np.arange(1, 7, 2)[1 3 5] x = np.linspace(1, 6, 6) # 1부터 6까지를 동일한 간격으로 6개의 값으로 나눈다.[1. 2. 3. 4. 5. 6.]x = np.linspace(1, 6, 5)[1. 2.25 3.5 4.75 6. ]``` 2차원 좌표평면값 만들기```python# (-1,-1) (-1, -0.99)...(-1, 4) (-0.99, -1) ... (4, 4) 좌표를 먼저 준비한다..