Python (with. Code)/Utils 12

[Utils] 파이썬 반올림 구현 (ft. 사사오입, round 함수 )

반올림 종류 파이썬 round() 반올림 함수는 기본적으로 오사오입의 방식을 따른다. 반올림 종류 사사오입 (Rounding half up) : 4 이하 버림, 5 이상 올림 오사오입 (Rounding half to even) : 5 미만 버림, 5 초과 올림 / 5는 앞자리가 홀수인 경우 올림, 짝수인 경우 버림 => 수를 짝수로 만들어 주는 방식 ex) 35 -> 40 / 25 -> 20 / python의 round() 함수 오사육입 (Rounding half down) : 5 이하 버림, 5 초과 올림 관련 링크 반올림 위키 : https://ko.wikipedia.org/wiki/%EB%B0%98%EC%98%AC%EB%A6%BC python3 round() 함수 링크 : https://docs...

[Utils] Custom Pre-commit hook 구현

Custom Pre-commit Hook 구현하기 👉 사용 사례 - API 문서 배포시 자동으로 error 코드가 적힌 html 문서가 같이 만들어 지도록 hook 에 추가 - hook은 (.py) 파일 구현 👉 구현 방법 - repo : local 값 - id와 name 설정 및 entry 로 .py 실행 - language : python 설정 # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: # make error code html - repo: local hooks: - id: make-error-enum-html name: make-error-en..

[Python] Datetime 이해 - aware, naive, datetime, timezone 등

Datetime 패키지 이해하기 Python에서 기본적으로 제공하는 Datetime 패키지에 대해 이해해 본다. - Datetime 모듈은 date와 time에 대한 조작을 위해 사용된다. Datetime 모듈 예시 1. naive vs aware - 해당 패키지에서 사용되는 날짜/시간 객체는 timezone 포함 여부에 따라 naive와 aware로 구분된다. - naive : tzinfo 정보를 포함하지 않는 날짜, 시간 객체 - aware : tzinfo, DST(daylight saving time) 정보를 포함한 날짜, 시간 객체 - 활용 1) 들어오는 datetime 값 (aware인지 naive인지)에 대한 형태 정의 - 활용 2) tzinfo 체크 및 시간대 변경 - 활용 3) tzinfo..

[Python Utils] 코드 컨벤션 템플릿 셋팅 (pre-commit, black, pycharm)

협업 간 코드 스타일/컨벤션을 맞추기 위해 다음과 같은 간단한 Code Formatter를 설정하였다. 목표 기능 1. git에 코드 push시 자동으로 formatting 체크 및 변경 2. 평소 IDE에서 코드 작성 후 저장시 자동으로 formatting 변경 사용 Tool - pre-commit-hook (pip install pre-commit-hooks) - Black (pip install black) - Pycharm (IDE) 1. pre-commit-hook.yaml 파일 - black을 hook으로 등록 (추가적으로 .flake8, isort 등 등록 가능) # See https://pre-commit.com for more information # See https://pre-comm..

[Python Utils] Python 매직메소드 (MagicMethod) 이해하기

매직메소드란? "__Method__" 형태의 인스턴스(객체)가 생성될 때 인터프리터에 의해 자동으로 호출되는 메소드 매직메소드 예시 __init__, __call__, __getattribute__ 등은 모두 매직메소드의 형태로 호출된다. # 1. 기본 MagicMethod class A: def __init__(self): print("A 클래스 __init__ 생성자 매직메소드로 실행됨") # 2. Class를 함수 호출하기, __call__ 매직메소드 class B: def __call__(self, *args, **kwargs): print("B 클래스 __call__ 매직메소드로 호출됨") b = B() b() # 3. '.' 도 __getattribute__ 의 매직메소드 class C: de..

[Python Utils] Python 제너레이터 사용

제너레이터 동작 방식 Generator yield 문은 메모리 절약을 위한 기법으로, generator는 iterator를 생성해주고 함수 안에 yield 키워드를 이용해서 데이터를 순차적으로 반환한다. 제너레이터의 이점으로는 메모리 절약 뿐만 아니라, 자연스러운 데이터 흐름 파이프라인으로 구성이 가능하다. (ex. 긴 스트림에 대한 주기적인 처리를 할 때, 특정 단위로 반복이 가능하다.) 제너레이터의 동작방식은 아래와 같다. 예제 코드 #제네레이터 생성 def ex_func1(nums): for i in nums: yield i * i if __name__ =="__main__": generator_ex = ex_func1([1,2,3]) print(next(generator_ex)) # 1 print..

[Python Utils] Python Decorator 활용

Python Decorator란? 파이썬 데코레이터란 함수를 수정하지 않고 추가 적인 기능을 더하고 싶을 때 주로 사용 아래 예제 코드를 수행하면 함수 호출 전이나 후에 기능이 동작하게 할 수 있다. def trace(func): # 호출할 함수를 매개변수로 받음 def wrapper(): print(func.__name__, '함수 시작') # __name__으로 함수 이름 출력 func() # 매개변수로 받은 함수를 호출 print(func.__name__, '함수 끝') return wrapper # wrapper 함수 반환 @trace # @데코레이터 def hello(): print('hello') hello() # 함수를 그대로 호출 ##출력 결과 hello 함수 시작 hello hello 함..

[Python Utils] Python Type 어노테이션/힌트 (Typing, mypy)

Python Type 어노테이션/힌트가 필요한 이유는? Python은 동적 타입 언어(Dynamic language)로 실행하는 시점에 변수의 타입(Type)을 고려하며 체크하기 때문에 타입 힌팅을 통해 좀 더 방어적인 코드를 작성 할 수 있다. mypy mypy는 정적 타입의 검사기로 실행시 함수에 정상적으로 Type이 맞게 들어오는지 검사 해주는 역할을 한다. # 라이브러리 설치 pip install mypy # 실행 명령어 mypy test.py # test.py def add(a: int, b: int) -> int: # int형 변수 a와 b를 입력받아서 int형 값을 반환 return a + b if __name__ == "__main__": add(1, 2) # 성공 add('h', 3) #..

[Python Utils] 코드 컨벤션 (pylint, flake8, pre-commit, mypy)

Pylint 파이썬 코드의 오류를 확인 및 코딩 표준 (PEP8) 을 검사 아래 처럼 Score와 문제가 있는 Line을 출력 해준다. # 라이브러리 설치 pip install pylint # pylint 실행 pylint pre-commit hook git 로컬에서 커밋시마다 주어진 조건에 따라 TEST 해주는 도구 black, isort, pylint, flake8 등... 다양한 code formatter와 style checker들을 차례대로 진행되게 할 수 있다. 설정은 pre-commit-config.yaml 파일로 관리 아래는 pre-commit으로 간단히 black이란 code formatter를 hook으로 거는 것 명령어 $ pip install pre-commit $ pre-commi..

[Python Utils] Python 코드 정리 Tool (Black, isort)

Black (코드 정리 Tool) 최근 파이썬 커뮤니티에서 가장 널리 쓰이고 있는 있는 Code Formatter로, Setting의 여지가 적어 포맷팅 규칙을 강요 받긴 함. 그러나 팀 내에 코드 스타일이 협의되고 표준화 되는 과정에 대한 시간적 소요를 줄여주고, 일관성 있는 코드 작성을 가능하게 함. https://black.readthedocs.io/en/stable/getting_started.html Getting Started - Black 22.3.0 documentation Previous The (future of the) Black code style black.readthedocs.io $ pip install black $ black # ex) black code/a.py isort..