python

    [Python] 리스트 값을 기준으로 다른 리스트 분리하기

    [Python] 리스트 값을 기준으로 다른 리스트 분리하기

    Introduction 가끔, 매번 외워두고 쓸 정도로 자주 쓰는 기능은 아닌데 막상 사용하려고 하면 까먹어서 다시 찾아보게 되는 기능들이 몇 가지 있다. 오늘 소개할 내용이 그런 내용인데, 바로 리스트 A의 각 요소 값을 기준으로 리스트 B를 분리하는 기능이다. 느낌적인 느낌은 아래와 같다. list_a = [1, 2, 3, 4, 5] list_b = [2.5, 4.5] >>> split_list_by_thresholds(target=list_a, thresholds=list_b) [[1, 2], [3, 4], [5]] list_b를 임계값 리스트로 사용해 list_a를 분리한다고 했을 때 원하는 결과의 모습이다. Solution 코드 공간을 더 많이 차지하지만 더 빠른 솔루션이 있고, 그냥 한 줄에 ..

    [Python] overrides 라이브러리 (리스코브 치환 원칙)

    [Python] overrides 라이브러리 (리스코브 치환 원칙)

    Introduction 파이썬에서 클래스 계층 구조를 확장시키다 보면 부모 클래스의 메서드를 오버라이딩 (overriding) 해야 할 일이 분명히 있을 것이다. 오버라이딩이란 부모 클래스를 상속받는 자식 클래스에서, 부모 클래스에서 이미 정의된 메서드를 새로 정의하는 행위를 뜻한다. 아래의 코드를 참고하자. class FooClass(): def __init__(self): pass def foo_function(self): print("Foo function.") return class FooChildClass(FooClass): def __init__(self): pass # Method overrided. def foo_function(self): super().foo_function() prin..

    [Design patterns] Singleton Pattern (싱글턴 패턴)

    [Design patterns] Singleton Pattern (싱글턴 패턴)

    Introduction Design Patterns: Elements of Reusable Object-Oriented Software (1994) 의 저자인 Erich Gamma 는 책이 출판된 15년 후의 인터뷰에서 이렇게 언급한 적이 있다. Larry: How would you refactor "Design Patterns"? Erich: ... When discussing which patterns to drop, we found that we still love them all. (Not really — I'm in favor of dropping Singleton. Its use is almost always a design smell.) 의역하자면 다음과 같다. Larry: "Design P..

    [Python] PEP 8: E731 do not assign a lambda expression, use a def

    [Python] PEP 8: E731 do not assign a lambda expression, use a def

    Introduction 파이썬에는 lambda expression (람다 표현식) 이라는 기능이 있다. 파이썬 코드를 자주 보는 사람들은 모두 한 번쯤은 람다 표현식을 써 봤거나 남이 쓰는 것을 본 적이 있을 것이다. 그런데 PEP 8 (참고) 규약을 기반으로 하는 정적 분석기 (ex. pycodestyle) 나 코드 오토포매터 (ex. autopep8) 를 사용하는 경우, 해당 도구들은 변수에 대입되는 람다 표현식을 목격하기만 하면 경고 메시지를 출력하거나 알아서 같은 기능을 하는 함수 정의로 대체해 버리는 것을 볼 수 있다. # autopep8의 format on save를 켜 둔 상태로 Ctrl + S를 누르면.. sample_lambda_expression = lambda x: x**2 # 이렇게..

    [Python] Logger 사용법

    [Python] Logger 사용법

    Introduction The Hitchhiker's Guide to Python 이란 책에는 다음과 같은 구절이 등장한다. The only time that print is a better option than logging is when the goal is to display a help statement for a command line application. Shell과 같은 커맨드 인터페이스에서 --help 옵션을 받아 사용법 도움말을 출력할 때 이외에는 항상 logging이 print보다 낫다는 뜻으로, 사실상 웬만한 상황에서는 print 대신 logging을 사용하는 것이 낫다는 의미이다. 그 이유로는 아래와 같은 내용을 들고 있다. The log record, which is create..

    [Python/Teams] 파이썬 프로세스에서 Teams로 메시지 보내기

    [Python/Teams] 파이썬 프로세스에서 Teams로 메시지 보내기

    Introduction 이전에 잠깐 파이썬 프로세스가 종료될 때에 팀즈나 이메일 등으로 알림을 받아보는 법에 대해서 알아봤었다. 링크 이전 글에서 소개한 툴은 딥러닝 모델의 학습에 특화된 알림 툴이어서 트리거 할 수 있는 메시지 종류도 한정적이었고 사용처도 제한되어 있었는데, 최근에 파이썬 프로세스로부터 팀즈로 메시지를 원하는대로 보내야 할 일이 생겨서 이번 기회에 관련 내용을 정리해 보려고 한다. Teams Connector Setup Add connector 먼저 메시지를 받기 원하는 팀즈 채널에서 커넥터를 구성해 주어야 한다. 위 사진처럼 채널 옆의 점 세개를 누른 후 커넥터 설정 창으로 진입하자. 커넥터 설정 창에서 Incoming Webhook 을 검색하고 추가되어 있지 않으면 추가를 해 주자...

    [OpenCV] cv2.fillPoly 도중 Segmentation fault + gdb 사용법

    [OpenCV] cv2.fillPoly 도중 Segmentation fault + gdb 사용법

    Introduction 얼마 전 모델 학습을 돌리다가 시작 후 3~4일쯤 지나서 Segmentation fault (core dumped) 라는 메시지와 함께 아무 에러 트레이스백 없이 프로세스가 종료되는 현상이 반복적으로 발생했다. 따로 디버거를 활성화 시켜 놓고 돌리지도 않았고, 무엇보다도 학습 시작 후 한참 이후에 아무 정보 없이 프로세스가 종료되니 디버그를 도저히 진행할 수가 없었다. 그런데 어느날, 학습 시작 후 몇 분만에 에러가 재현되는 학습 세팅을 발견해 비로소 디버그 작업에 착수할 수 있었다. 빠르게 제목의 상황의 해결법을 보고 싶다면 우측 목차를 통해 문제 해결 단락으로 넘어가자! 삽질의 과정 파이썬 스크립트 실행 도중 Segmentation fault 에러가 발생할 때 파이썬 디버거 (..

    [Python/VSCode] 독스트링 스타일과 autoDocstring

    [Python/VSCode] 독스트링 스타일과 autoDocstring

    Introduction 예전 포스트에서는 파이썬의 독스트링에 대해 간략히 소개를 했었다. 링크 독스트링은 파이썬 스크립트 내부에 함수, 클래스, 모듈에 대한 정보를 적어놓은 문자열로 그 자체로 코드 도큐멘테이션의 기능을 한다. 독스트링이 꼼꼼하게 적혀있을수록 작성자 이외의 다른 사용자가 코드의 목적과 작동 방식을 파악하기가 쉬워지며, 최종적으로는 이런 독스트링들을 모아 하나의 라이브러리 문서를 구성하는 것도 가능하다. 이전 글 말미에서는 정형화된 문서화 컨벤션을 따라 독스트링을 작성해 놓으면 문서화 툴을 이용한 라이브러리 도큐멘테이션이 가능하다고 언급했는데 이번 포스트에서는 어떤 독스트링 스타일 컨벤션 들이 있는지 알아보고, 일관된 스타일의 독스트링을 작성하는 데 도움이 되는 툴을 소개할 것이다. Doc..