Languages & Frameworks/Python
[Python] 파이썬 버전, 패키지 관리
[Python] 파이썬 버전, 패키지 관리
2020.10.10뭘 쓰든 한가지 방법으로 통일해서 관리하는게 좋음. pyenv / venv / virtualenv / conda 비교 pyenv windows는 지원 안함. python 버전 관리를 위해 쓰는거라. 특정 버전에 종속적인게 아니다. brew install ... python 자체 버전 관리를 위해 사용. 따라서 패키지 관리는 virtualenv 등과 연계해서 사용해야 한다. pyenv 하위로 virtualenv를 사용할 수 있다. (이게 좀 더 낫다.) pyenv-virtualenv를 사용하는 방법이 에러로 불가한 경우? python 버전은 pyenv로 관리하고, 해당 python 버전의 venv 모듈로 가상환경 만들면서 [python + 패키지]를 가상환경으로 묶는 방법을 사용해도 된다. venv pyt..
[python] 사용하면 좋은 패턴들
[python] 사용하면 좋은 패턴들
2019.02.11데이터 클래스는? @dataclass docs.python.org/ko/3/library/dataclasses.html 다형성을 쓰고 싶다면? abc 클래스 python에 interface는 없지만 abstract base class가 있다. https://docs.python.org/ko/3/library/abc.html 근데 메서드 명만 같으면 되고, 파라미터는 강제하지 않음. 근데 어차피 다형성 쓸거라면 파라미터도 맞춰주어야 한다. Python Singleton https://stackoverflow.com/questions/6760685/creating-a-singleton-in-python wikidocs.net/3693 doctest : docstring에 간단히 명시해서 로직 테스트 가능 h..
[python] 헷갈리는 모듈 스코프 변수, 전역 변수처럼 쓸 수 있을까? - 아니. class level 변수를 쓰자.
[python] 헷갈리는 모듈 스코프 변수, 전역 변수처럼 쓸 수 있을까? - 아니. class level 변수를 쓰자.
2019.02.04요약 : 전역 변수, 모듈 스코프 변수 보다는 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 : 디버깅
[python] pdb : 디버깅
2018.11.12gdb처럼 쓰면 된다. ```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)
[python] 성능 측정, 프로파일링(profiling)
2018.11.12PyCharm같은 IDE에서도 지원하기 때문에, 굳이 직접 돌리지 않아도 된다. 상단에 Run, Debug 아이콘 옆에 보면 프로파일링 다양하게 지원함. python 기본 내장 라이브러리 benchmarking 목적 : timeit profiling 목적 : cProfile 근데, 시스템 함수까지 다 출력되어 보기 불편하고 복잡하다. ``bash python -m cProfile -s cumulative file.py`` 진짜 간단하게 함수의 수행 시간을 측정하고 싶을 때 : timeit ```python from timeit import timeit def mkList1(): result = [] for value in range(1000): result.append(value) return resul..
[python] socket
[python] socket
2018.11.102017/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
[python] Flask
2018.11.05http://flask.pocoo.org/docs/1.0/quickstart/#variable-rules http://jinja.pocoo.org/docs/2.10/templates/ 컨텍스트 전역 변수 수신한 HTTP request 정보에 접근하기 위해서 컨텍스트 전역 변수를 사용한다. 이런 정보들을 리퀘스트를 수신할 때 마다 뷰 함수의 인자로 넘기도록 해도 되는데, 쓸데없이 인자를 많이 가지고 있게 되는 것을 피하기 위해 플라스크는 이를 전역 변수 형식으로 제공한다. 근데 실제 전역 변수는 아니다. 멀티스레드 환경에서 못쓰니까. `` request`` 변수가 전역변수 처럼 동작하기는 하지만 실제로는 스레드들은 각각 다른 오브젝트를 처리하게 된다. 컨텍스트는 어플리케이션 컨텍스트/리퀘스트 컨텍스트로 나..
[python] docstring, 문서화
[python] docstring, 문서화
2018.10.15docstring 작성 포맷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 필드
[python] @property, getter setter, private 필드
2018.08.07프로퍼티 지정 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, datetime
[python] time, date, datetime
2017.11.12timeout https://pypi.python.org/pypi/timeout-decorator time ```python time.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.datetim..
[python] File IO open 함수 및 내장함수
[python] File IO open 함수 및 내장함수
2017.09.22open 함수```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
[python] pyplot.matplotlib
2017.09.13matplotlib 그래프를 그리는 라이브러리다. matplotlib의 pyplot모듈을 이용한다. 룩이 좀 구리지만 기능 자체는 꽤 쓸만하다. x값 만들기 ```python x = 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..