SW개발/Python

    [Python]파이썬 비동기 프로그래밍 동작 원리에 대해서 (feat. 이벤트 루프)

    안녕하세요, 오늘은 파이썬 비동기 프로그래밍 동작 원리에 대해서 알아보려고 합니다. 파이썬의 비동기는 이벤트 루프를 통해 동작하고 있다는 정도의 이해만 한 채로 개발을 하다 보니 문득 내부 동작은 어떻게 이루어지는지가 궁금하여 공부해보게 되었습니다. 또한 애초에 파이썬은 동기 방식으로 동작하도록 설계되었기 때문에 어떻게 비동기 프로그래밍을 지원하는지도 궁금했습니다. (Python은 3.4부터 asyncio가 표준 비동기 라이브러리로채택되었습니다.) 코루틴이란? (coroutine) 파이썬의 비동기 프로그래밍을 이해하기 위해서는, 먼저 코루틴에 대한 이해가 수반되어야 합니다. 이 글에서는 간단하게 설명하고 넘어가도록 하고, 추후 다른 포스팅에서 코루틴에대해 상세히 다뤄보도록 하겠습니다. 간단하게 설명하자..

    [Python]staticmethod vs classmethod (feat. 언제 사용할까?)

    최근에 개발을 하다가 파이썬의 정적 메소드와 클래스 메소드를 언제 사용해야 하는지에 대한 기준이 궁금해졌습니다. 단순하게 눈에 보이는 차이로는 self 와 cls의 차이였는데요. 이 둘을 주로 어떤 상황에서, 어떤 용도로 나누어 사용하는지 알아보려고 합니다. 이와 관련한 유명 아티클이 있어 해당 글의 일부를 차용하였고, 개인적으로 이해한 것을 바탕으로 정리했습니다. https://julien.danjou.info/guide-python-static-class-abstract-methods/ The definitive guide on how to use static, class or abstract methods in Python Doing code reviews is a great way to disco..

    [Python]partial 란? (feat. functools)

    partial() 란? positional parameter인 args와 keyword parameter인 keywords로 호출된 함수처럼 동작하는 새 partial 객체를 반환하는 역할을 합니다. 쉽게 말하자면 함수 인자의 값이 미리 채워진 상태로 동작하는 함수(partial 객체)가 반환되는 것입니다. partial 파이썬 공식 Document functools — 고차 함수와 콜러블 객체에 대한 연산 — Python 3.10.8 문서 functools — 고차 함수와 콜러블 객체에 대한 연산 소스 코드: Lib/functools.py functools 모듈은 고차 함수를 위한 것입니다: 다른 함수에 작용하거나 다른 함수를 반환하는 함수. 일반적으로, 모든 콜러 docs.python.org 언제 사..

    [Python]파이썬 정렬 알고리즘, Timsort

    파이썬은 sort(), sorted() 메서드를 통해 정말 간편하게 정렬된 값을 얻을 수 있습니다. 사용하는 방법도 매우 쉽기에 내부 동작 원리에 대해서는 깊게 생각해본 적이 없었습니다. 이번 포스팅에서는 파이썬이 어떤 정렬 알고리즘을 사용하는지 알아보도록 하겠습니다. Timsort 파이썬은 Tim sort라는 정렬 알고리즘 표준으로 채택되어 사용 중입니다. Timsort는 삽입정렬과 병합정렬을 합친 알고리즘입니다. 2001년도에 고안되었으며, 창시자인 Tim Peters의 이름을 따왔습니다. 또한, 이 알고리즘은 파이썬 뿐만 아니라 Java SE7, Android, 구글 크롬 엔진등 다양한 곳에서 채택되어 사용중입니다. Timsort 특징 현실 세계의 데이터들은 완전 무작위가 아니라 어느정도는 정렬이..

    [Python]네임스페이스란(Namespace) ?

    지난번 Zen of Python에 잠깐 언급된 파이썬의 네임스페이스에 대해 알아보는 포스팅을 써보려고 합니다. 지난 포스팅 -> Zen of Python https://leffept.tistory.com/396 [Python]The Zen of Python - 파이써닉한 코드 파이썬에서의 디자인 원칙을 잘 나타내는 The Zen of Python이라는 것이 존재한다. 여기에 존재하는 원칙들을 바탕으로 자신이 작성한 코드가 파이써닉한 코드인지 아닌지에 대해서도 생각해볼 수 leffept.tistory.com 네임스페이스란 ? 네임스페이스란 특정한 객체를 이름에 따라 구분할 수 있는 범위를 말합니다. 파이썬 내부의 모든 것들은 전부 객체로 구성되어 있고, 이들은 특정 이름들과의 매핑 관계를 가지고 있습니다...

    [Python]Function Parameter, Argument 에 대하여

    파이썬은 매우 자유도가 높은 언어이다. 따라서 함수를 사용하면서 인자값에 대해 큰 신경을 쓰지 않아도 에러 없이 편하게 프로그래밍을 할 수 있다. 하지만 그러다가 non-default argument follows default argument 라는 에러를 마주하게 되었고, 이번 기회에 파이썬 함수의 Paramter, Argument의 처리에 관해서 자세히 공부해보기 위해 포스팅을 작성하게 되었다. https://docs.python.org/ko/3.10/glossary.html 의 parameter, argument 참조. 용어집 — Python 3.10.4 문서 같은 형의 두 인자를 수반하는 연산이 일어나는 동안, 한 형의 인스턴스를 다른 형으로 묵시적으로 변환하는 것. 예를 들어, int(3.15)..

    [Python]The Zen of Python - 파이써닉한 코드

    파이썬에서의 디자인 원칙을 잘 나타내는 The Zen of Python이라는 것이 존재한다. 여기에 존재하는 원칙들을 바탕으로 자신이 작성한 코드가 파이써닉한 코드인지 아닌지에 대해서도 생각해볼 수 있을 것이다. https://www.python.org/dev/peps/pep-0020/ PEP 20 -- The Zen of Python The official home of the Python Programming Language www.python.org 파이썬 shell에서 import this를 입력하면 The Zen of Python 이스터에그를 확인할 수 있다. >>> import this Beautiful is better than ugly. 아름다운 것이 추한 것보다 낫다. Explicit i..

    [Python]TODO 주석 활용법 (feat. 주석 키워드)

    이번 포스팅에서는 TODO 주석을 활용하는 방법에 대해 알아보겠습니다. 1. TODO: # TODO: 해야할 작업 class Leffe(): pass TODO라는 키워드를 활용하여 해야할 작업이라는 표시를 정할 수 있습니다. 이와 비슷하게 프로그래머들 사이에서 널리 사용되는 주석의 키워드를 몇가지 더 알려드리겠습니다. 2. FIXME: # FIXME: 오작동을 일으킨다고 알려진 코드 class Leffe(): pass 오작동을 일으킨다고 알려진 코드에 적용할 수 있습니다. 3. HACK: # HACK: 아름답지 않은 해결책 class Leffe(): pass 해결책이 깔끔하지 않은 경우에 적용할 수 있습니다. 4. XXX: # XXX: 이곳에 큰 문제가 있다 class Leffe(): pass 큰 문제가..

    [Python]테스트코드 커버리지 측정 - coverage

    파이썬에서 작성한 테스트 코드의 커버리지를 측정하는 도구가 있다. https://github.com/nedbat/coveragepy GitHub - nedbat/coveragepy: Code coverage measurement for Python Code coverage measurement for Python. Contribute to nedbat/coveragepy development by creating an account on GitHub. github.com Coverage 설치 pip install coverage 먼저 측정을 위해 coverage라는 도구를 설치한다. .coveragerc 설정파일 추가 [run] include = /커버리지를 측정할 디렉토리명/* omit = *migra..

    [Python]예외처리 - try, except, else, finally (raise) 사용하기

    if, else 문으로만 모든 에러를 처리한다면 indent가 늘어남에 따라 가독성이 떨어지는 코드가 되기 마련입니다. 따라서, 예외처리 구문을 사용하여 코드를 깔끔하게 작성하도록 하여야 합니다. 이번 포스팅에서는 Python의 예외처리 방법에 대해서 간단하게 알아보겠습니다. Python의 예외처리의 기본 흐름은 try -> except -> else -> finally 순으로 진행됩니다. 모든 단계를 사용할 필요는 없고 필요에 따라 적절히 골라서 사용하면 됩니다. 하나씩 설명해보겠습니다. try & except try: # 에외처리할 코드 print(10/0) except ZeroDivisionError: # 발생하는 에러에 대한 처리 print("zero division error") 가장 기본적으로..