Python은 여러 패키지를 함께 사용하는 경우가 많다. 그런데 패키지 버전이 맞지 않으면 사소한 오류가 발생할 수 있다. 그래서 가상환경을 생성, 실행, 관리하는 툴도 다양하다.필자는 miniconda를 사용해왔다. Anaconda를 쓰자니 무겁고, venv를 쓰자니 불편했다. miniconda도 한 번씩 시스템과 충돌이 생겨 만족스럽지 않았다. 최근 uv가 뜨길래 "유행인가?"하고 써봤더니 충격적이었다.uv는 빠르고, 편하다. 진짜 빠르다.단점이라고 하면 신생 라이브러리이다 보니 정보가 부족하다. ChatGPT한테 물어봐도 계속 헛소리만 한다.pip install uvpip가 설치되어 있다면 pip install로 uv를 설치할 수 있다.🗃️ 프로젝트 초기화uv init 프로젝트_이름.python-..
본 글은 아래 환경에서 테스트한 코드로 작성했다.OS: Window 11Python: 3.13.0GCC(MinGW-W64): 13.3.0Go: 1.23.3추가로 MacOS에서도 동일한 코드로 작동하는 것을 확인했다.개요언어(C, Go)를 공유 라이브러리로 빌드한다.컴파일된 라이브러리를 ctypes로 불러온다.사용할 함수의 파라미터 및 리턴 자료형을 정의한다.함수를 호출한다.ctypesctypes는 dll 또는 공유 라이브러리를 불러올 수 있는 Python 내장 라이브러리다. C와 같이 외부 언어로 작성한 코드를 Python에서 실행하도록 도와준다.C to PyC를 공유 라이브러리로// lib.cfloat add_float(float a, float b) { return a + b;}실수를 더하는 간..
Python은 느리다. 그렇기 때문에 Python에 대한 이해도에 따라 코드의 성능이 크게 차이 날 수 있다. 이 번 글에서는 Python의 속도를 향상할 수 있는 방법에 대해 적어보려 한다. 이 글은 각각의 개념에 대해 상세하게 설명하지 않는다. 대신 왜 성능에 문제가 발생하고, 어떻게 해결할 수 있는지에 초점을 두고 작성하였다. JIT 활용 내장 함수 활용 Generator로 메모리 아끼기 for / while보다 빠른 반복 dictionary와 set으로 조회 내장 모듈의 자료구조 빠르게 문자열 합치기 빠른 입출력 global 참조 피하기 dot 줄이기 불필요한 연산, 호출 줄이기 Python은 간결하고 명확한 코드 작성을 지향한다. 위 방법 중 일부 표현은 파이썬스럽(Pythonic)지 않을 수 ..
Python 3.12 정식 발표가 2023/10/02에 예정되어 있다. 현재 Python 3.12 0rc3가 공개되었고 여러 업데이트가 이루어졌다. This release, 3.12.0rc3, is the absolutely last release preview for Python 3.12. There will be no ABI changes from this point forward in the 3.12 series. What’s New In Python 3.12 Release, 3.12.0rc3,, Date, September 22, 2023,. This article explains the new features in Python 3.12, compared to 3.11. For full detai..
참고자료 https://peps.python.org/pep-0572/ https://docs.python.org/ko/3.11/whatsnew/3.8.html 소개 := 대입 연산자를 walrus operator라고 부른다. walrus는 바다코끼리를 뜻하는데 :=이 마치 바다코끼리의 눈과 엄니를 닮아서라고 한다. 정식 명칭은 assignment expression이다. Gopher라면 익숙할 이 대입 연산자는 코드를 간결하게 만들어준다. 다만 Python 3.8에서 도입된 연산자이므로 사용 시 버전에 유의해야 한다. # Without := match = pattern.search(data) if match is not None: print(f"matched pattern: {match}") # With..
nomad-coders님의 영상을 보다가 dataclasses라는 유용한 라이브러리를 알게 되어 정리하게 되었다. 정리한 내용은 공식 문서 (3.11)를 참고하여 작성하였다. 추가로 객체 데이터를 다룰 때 유용하게 사용하고 있는 property도 함께 소개하였다. dataclasses 개념 class Person: def __init__(self, pid, name, age): self.pid = pid self.name = name self.age = age class내에서 __init__을 사용해 필요한 데이터를 저장해두는 아주 전형적인 코드이다. 하지만 받아야 하는 데이터가 많을 경우, 동일한 코드를 반복적으로 작성해야 하는 번거로움이 생긴다. 이럴 때 dataclasses를 사용해 간결하게 작성할..