Programming
![[Python/Teams] 파이썬 프로세스에서 Teams로 메시지 보내기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fls7RU%2Fbtry5DZgl07%2FcfM4T4YMcdoHjOSBDBZXwk%2Fimg.png)
[Python/Teams] 파이썬 프로세스에서 Teams로 메시지 보내기
Introduction 이전에 잠깐 파이썬 프로세스가 종료될 때에 팀즈나 이메일 등으로 알림을 받아보는 법에 대해서 알아봤었다. 링크 이전 글에서 소개한 툴은 딥러닝 모델의 학습에 특화된 알림 툴이어서 트리거 할 수 있는 메시지 종류도 한정적이었고 사용처도 제한되어 있었는데, 최근에 파이썬 프로세스로부터 팀즈로 메시지를 원하는대로 보내야 할 일이 생겨서 이번 기회에 관련 내용을 정리해 보려고 한다. Teams Connector Setup Add connector 먼저 메시지를 받기 원하는 팀즈 채널에서 커넥터를 구성해 주어야 한다. 위 사진처럼 채널 옆의 점 세개를 누른 후 커넥터 설정 창으로 진입하자. 커넥터 설정 창에서 Incoming Webhook 을 검색하고 추가되어 있지 않으면 추가를 해 주자...
![[Python/VSCode] 독스트링 스타일과 autoDocstring](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3xuXh%2FbtrviIckc6E%2FFeeyl8hM4LclKPc6pgqDjK%2Fimg.jpg)
[Python/VSCode] 독스트링 스타일과 autoDocstring
Introduction 예전 포스트에서는 파이썬의 독스트링에 대해 간략히 소개를 했었다. 링크 독스트링은 파이썬 스크립트 내부에 함수, 클래스, 모듈에 대한 정보를 적어놓은 문자열로 그 자체로 코드 도큐멘테이션의 기능을 한다. 독스트링이 꼼꼼하게 적혀있을수록 작성자 이외의 다른 사용자가 코드의 목적과 작동 방식을 파악하기가 쉬워지며, 최종적으로는 이런 독스트링들을 모아 하나의 라이브러리 문서를 구성하는 것도 가능하다. 이전 글 말미에서는 정형화된 문서화 컨벤션을 따라 독스트링을 작성해 놓으면 문서화 툴을 이용한 라이브러리 도큐멘테이션이 가능하다고 언급했는데 이번 포스트에서는 어떤 독스트링 스타일 컨벤션 들이 있는지 알아보고, 일관된 스타일의 독스트링을 작성하는 데 도움이 되는 툴을 소개할 것이다. Doc..
![[Python] Pythonic 이란?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0Uiut%2FbtrswU0dVsR%2FkZWv5PMJWSKUoJVy7bhf5k%2Fimg.png)
[Python] Pythonic 이란?
Introduction Pythonic 한 코드란 무엇일까? 본인은 pythonic 한 코드란 파이썬의 특징적인 기능들을 잘 살리면서 파이썬의 철학에 맞게 작성한 코드라고 두루뭉술하게 알고 있었고, 이전 포스트에서도 굉장히 여러 번 pythonic이란 단어를 언급했었다. 하지만 막상 pythonic 하다는 것이 정확히 어떤 것을 뜻하는지 인지하고 있나 생각 해 보니, 그렇지 않다는 것을 깨달았다. 따라서 이번 포스팅에서는 Pythonic 한 코드에 대해서 알아보도록 하겠다. What is Pythonic? Pythonic 하다는 표현에 대한 설명은 꽤나 다양한 버전이 존재한다. 1. 파이썬 언어의 특징적인 기능들을 이용해 보기 좋은 / 명확한 / 유지보수가 쉬운 코드를 작성하는 것, 2. 파이썬 커뮤니티..
![[Python] Multi-line string Cheet Sheet](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTpmPp%2Fbtrqoav6hxo%2F36I39hA7C4xLMPucyehTe0%2Fimg.png)
[Python] Multi-line string Cheet Sheet
Introduction 가끔 그럴 때가 있다. 95자나 105자 같이 PEP 8 규약 (참고) 혹은 팀에서 정해놓은 한 줄 길이 제한에 맞추어 코드를 작성해야 하는데, 어떻게 작성하려 해도 explainability를 유지한 채로 한 줄에 다 못 넣겠는 경우가 있다. 특히 베이스로 들어가 있는 인덴트 (하나당 네 칸을 잡아먹는다) 갯수가 많을 수록 문제는 심각해진다. 일반적인 코드야 새 변수를 선언하고 괄호로 예쁘게 묶고 하는 식으로 무조건 해결할 수 있는 편인데, 뭔가 에러를 raise 하면서 같이 출력해야 하는 에러 메시지 처럼 긴 스트링을 작성해야 하는 경우엔 도통 어떻게 잘라서 줄나눔을 해야 하는지 굉장히 헷갈리는 경우가 많다. assert isinstance(dataset, ConcatDatas..
![[Python] importlib과 모듈 리로드](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Zzny%2FbtrpcPHaJdr%2FNi8VrMLJXAJndtORJKmDjK%2Fimg.png)
[Python] importlib과 모듈 리로드
Introduction Jupyter notebook과 같은 대화형 개발 도구를 이용해 프로토타이핑을 하다 보면, 이미 임포트 해둔 모듈의 내용을 수정하고 싶을 때가 많다. 단순히 해당 임포트 구문을 다시 실행시키면 되지 않을까? >>> import foo_module >>> # foo_module.py의 코드 내용 변경... >>> import foo_module >>> # 변경 사항은 여전히 적용되지 않는다 아쉽게도 이미 한번 임포트 된 모듈은 다시 임포트 구문을 실행시킨다 해도 변경된 내용이 인터프리터 상에 적용되지는 않는다. 물론 노트북 커널이나 인터프리터를 재시작한 후 다시 임포트를 하면 변경 내용을 반영시킬 수 있다. 하지만 다시 실행시켰을 때 코드 테스트 환경을 똑같이 재현하기가 어려운 상황..
![[Python] TypeError: exceptions must derive from BaseException](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKgnci%2FbtrhGSqWo9o%2F39bgjq9RKSglNn3OB4X4wk%2Fimg.png)
[Python] TypeError: exceptions must derive from BaseException
Introduction 파이썬 개발 중 아주 가끔씩, 다음과 같은 TypeError 메시지를 만나볼 수 있다. TypeError: exceptions must derive from BaseException 뭐가 문제였을까? Solution 정답은 바로 이전 포스트에서도 언급했듯이, 파이썬3 에서는 BaseException 내장 클래스를 상속받는 클래스만이 예외 클래스로 인식되기 때문이다. 따라서 만약 예외 클래스를 인자로 받아야 하는 자리에 예외 클래스로 인식되지 않는 (BaseExeption을 상속받지 않는) 클래스를 적어놓는 경우 위와 같은 에러 메시지를 보게 된다. class FooClass: pass try: raise FooClass() except FooClass: print("Catch!")..
![[Python] 클래스가 object를 상속받는 경우](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcu53hY%2FbtraTa0xqlJ%2FnbnuKoiYJ3OFTQ45NRSSbK%2Fimg.png)
[Python] 클래스가 object를 상속받는 경우
Introduction 남의 파이썬 코드를 보다 보면, 종종 다음과 같은 형태의 클래스 선언과 마주하게 된다. class MyClass(object): # blah blah... 일단은 해당 라인만 보면 내가 선언한 클래스가 object 클래스를 상속 받아서 뭔가를 하고 있는 것처럼 보인다. 하지만 스크롤을 더 내려 봐도 상속을 받아서 따로 하는 것도 없어 보이고, 심지어는 object 상속을 제거해도 코드는 아무런 에러 없이 멀쩡히 돌아간다! 대체 이건 용도가 무엇이며 왜 굳이 넣는 걸까? 결론부터 말하자면, 파이썬 3에서의 object 상속은 표기상의 차이 이외에 상속 관계가 없는 클래스 선언과 아무런 차이점이 없다. 파이썬 2 (정확히는 2.2 이상) 에서는 클래스에 object를 명시적으로 상속시..
![[Python] 프로파일링 (profiling)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDwBPy%2Fbtq4z2eN3DR%2FXdBpcY7mhO5kjpgJ4cg9g0%2Fimg.png)
[Python] 프로파일링 (profiling)
Introduction 파이썬 코드를 작성하다 보면 성능 최적화를 위해 코드의 실행 시간을 정확히 측정하고 싶을 때가 있다. 물론 아래와 같이 time 모듈을 이용해 시간 성능 저하가 예상되는 일부 코드 블럭의 실행 시간을 직접 측정해 볼 수 있지만, 요소별로 실행 시간을 측정하기가 불편하고, 무엇보다도 파이썬의 동적인 특성으로 인해 예상되는 지연 구간과 실제 지연이 일어나는 부분이 다를 수 있다는 문제가 있다. from time import time from math import sin, cos, pi def projectile_landing_position(velocity, angle, g_constant): """ XY평면 (0,0) 좌표에서 X축 기준 angle(deg,