Programming/Python

    [Python] 파이썬 3.11 기능 소개

    [Python] 파이썬 3.11 기능 소개

    Introduction 파이썬 3.10 기능 소개를 한 지 얼마 지나지 않은 것 같은데, 슬슬 3.11 버전에 대한 소식도 들려오고 있다. 이번 글에서는 3.10 버전과 비교해 3.11 버전에서는 어떤 기능들이 새롭게 추가 되었는지 소개하고자 한다. 이 글은 3.11.0b4 릴리즈를 기준으로 한다. 설치는 이 링크를 참고하자. 예제와 표의 일부는 공식 도큐멘테이션에서 참고했다. (이전 글) [Python] 파이썬 3.10 기능 소개 1. Faster CPython 파이썬 3.11 버전은 이전 버전에 비해 (3.10) 전반적인 실행 속도가 10%~60% 정도, 평균적으로는 25% 정도 빨라졌다고 한다. 설명만으로는 와닿지 않으니 한번 테스트를 해 보자. import time def timer(functio..

    [Python] Error parsing XML: not well-formed (invalid token) 에러 해결

    [Python] Error parsing XML: not well-formed (invalid token) 에러 해결

    Introduction 파이썬에서 XML 파일을 자동으로 생성한 후, xmltodict 나 ElementTree 를 사용해 다시 XML 파일을 파싱하려고 할 때 다음과 같은 에러가 발생하는 경우가 있다. Error parsing XML: not well-formed (invalid token) 사용하는 도구에 따라 XML 파일의 어느 위치가 잘못 되었는지 알려 주기도 하기 때문에 vim과 같은 에디터를 열어 해당 위치 내용을 직접 수정해도 되지만, 파일이 크고 수정해야 하는 지점이 많으면 이 방법을 사용하기엔 여의치 않다. 이번 글에서는 파이썬을 이용해 해당 문제를 편하게 해결하는 방법을 소개한다. Problem 위 문제의 원인은 크게 두 가지로 나눌 수 있다. XML 파일 내부에 XML 문서에서 처음부..

    [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..

    [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 을 검색하고 추가되어 있지 않으면 추가를 해 주자...

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

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

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