Python
-
Python Typing에 대해 알아보기(1) Literal (openai python 소스코드로 살펴보기)카테고리 없음 2024. 2. 24. 22:47
Literal Literal은 타입 체커에게 특정 값을 가진다는 것을 명시적으로 전달할 때 쓰입니다. 코드로 예시를 보겠습니다. 아래 func함수에서 x값에는 4가 들어와야 합니다. func에 3을 넘기면 IDE(pycharm)에서 문제가 있다고 노란 불이 들어오는 것을 볼 수 있습니다. 에러 내용도 4가 들어와야 하는데 3이 들어왔다고 말하고 있습니다. openai 코드 예시 (Literal ) openai 소스코드로 Literal을 살펴보겠습니다. exception 클래스를 정의할 때 http 상태코드에 맞는 명시적인 값을 받도록 Literal을 사용했습니다. Literal[400] => 400 에러 Literal[401] => 401 에러 .. Literal 은 여러 값을 정의해놓을 수 있습니다. ..
-
python @runtime_checkable이란? (openai 개발자들이 짠 python code 예시 함께 살펴보기)python 2024. 2. 24. 14:38
python 3.8부터 도입된 @runtime_checkable 데코레이터를 사용하면 프로토콜 클래스를 런타임에서 isinstance() 및 issubclass() 함수와 함께 사용할 수 있게 됩니다. 프로토콜 클래스란 typing.Protocol을 상속받은 클래스를 말합니다. runtime_checkable은 같은 클래스를 상속받진 않았지만, 런타임에서 타이핑 검증을 하고 싶을 경우 유용하게 쓸 수 있는 데코레이터입니다. 말로 하면 이해가 잘 안되니 코드로 설명해보겠습니다. 1. @runtime_checkable를 사용하지 않은 경우 우선 @runtime_checkable를 사용하지 않은 일반적인 상황입니다. JsonSerializable, Person 두 클래스 모두 아무것도 상속받지 않은 순수 클래..
-
python RecursionError: maximum recursion depth exceeded 발생시python 2023. 5. 2. 19:21
python이 기본적으로 제공하는 재귀 호출의 최대 깊이는 1000입니다. 때문에 재귀 함수 호출이 1000을 넘어가는 순간 RecursionError가 발생합니다. 대부분 로직에 문제가 있어 해당 오류가 발생합니다. (일반적으로 1000depth의 재귀 함수 호출은 좋지 않다...) 하지만 꼭 재귀함수가 1000회이상 돌아야 한다면, sys.setrecursionlimit 를 사용해 해결할 수 있습니다. 함수 이름처럼 재귀함수 limit을 늘려주는 기능입니다. 함수 인자에는 limit값을 설정해주면 됩니다. (아래 예시에서는 10의 6제곱을 사용함) import sys sys.setrecursionlimit(10 ** 6)
-
파이썬 심화: function parameterpython 2022. 2. 12. 22:44
function parameter Argument vs Parameter Semantics parameter 함수 정의 시 parameter라고 부름 def my_func(a, b): passarguments 함수 호출 시 arguments라고 부름x = 1 y = "a" my_func(x, y) 이때 x, y는 refernce 함수에 reference(주소값)을 넘긴다. Positional and Keyword Arguments 함수 정의 혹은 호출 시 kwargs가 오면, 그 뒤는 무조건 kwargs여야한다. def my_func(a=1, b, c) 불가능! my_func(a=1, 2,3) 불가능! Unpacking Iterables 튜플 정의 방법 괄호 ()를 사용해도 튜플이지만, 아래처럼 해도 튜..
-
파이썬 심화: 변수와 메모리python 2022. 2. 12. 22:42
Reference Counting 파이썬은 객체가 참조될 때마다 ref_count를 +1한다. 0이 되면 python memory manager가 객체를 메모리에서 삭제함. (할당 해제) import sys my_var = [1,2,3] sys.getrefcount(my_var) Garbage Collection 순환참조의 경우 ref_count는 절대 0이 되지 않는다. 이 경우 referece counting을 통해 python memory manager가 객체를 메모리에서 삭제할 수 없음. -> memory leak 발생 GC는 순환참조인 것들을 메모리에서 지워주는 역할을 한다. gc는 기본적으로 turn on 상태다. gc 모듈을 사용해서 gc를 끄거나 수동실행 등 조작할 수 있다. Variabl..
-
파이썬 클린코드 2python 2022. 2. 12. 22:41
Pythonic Code 프로그래밍에서 관용구(idiom)는 특정 작업을 수행하기 위해 코드를 작성하는 특별한 방법이다. 이 관용구를 따른 코드를 관용적이라 부르고 파이썬에선 pythonic하다고 한다. 일반적으로 관용구를 따랐을 때 성능이 좋고, 이해하기 쉽다. 인덱스와 슬라이스 인덱스로 접근하는 건 사실 slice를 전달하는 것과 같다. (아래 예시 참고) my_list = [i for i in range(10)] print(my_list[1:9:2]) interval = slice(1,9,2) print(my_list[interval]) [1, 3, 5, 7] [1, 3, 5, 7]자체 시퀀스 생성 위 예시처럼 indexing할 수 있는 이유는 리스트가 스퀀스 프로토콜(__getitem__, __l..
-
파이썬 클린코드 1python 2022. 2. 12. 22:40
소개, 코드 포매팅과 도구 클린 코드는 포매팅 이상의 훨씬 중요한 것을 의미한다. 때문에 표준 포매팅을 유지하는 것이 유지보수성의 핵심 유의사항이다. 파이썬이 제공하는 기능을 사용하여 자체 문서화된 코드를 작성하는 방법 코드의 레이아웃을 일정하게 유지하여 팀 멤버들이 문제의 본질을 해결하는데 초점을 맞출 수 있도록 도구를 설정하는 방법 클린 코드의 의미 클린코드에 대한 유일하고 엄격한 정의는 없다. 수십 년 동안 프로그래밍 언어는 인간의 아이디어를 컴퓨터에 전달하기 위해 사용하는 언어라 생각했지만 틀린 생각이다. 프로그래밍 언어의 진정한 의미는 아이디어를 다른 개발자에게 전달하는 것이다. 클린 코드 여부는 다른 엔지니어 코드를 읽고 유지보수 할 수 있는지 여부에 달려 있다. 클린 코드, 클린 아키텍쳐에 ..
-
python sorted keypython 2021. 2. 27. 09:42
sorted함수는 정렬할 때 사용하는 함수입니다. 인자로 리스트, 튜플, 딕셔너리를 넘겨주면 정렬이 됩니다. 디폴트는 오름차순이구요. reverse=True 값을 주면 내림차순으로 정렬됩니다. >>> nums = [5,2,4,1,3] >>> nums = sorted(nums) >>> nums [1, 2, 3, 4, 5] >>> nums = sorted(nums, reverse=True) >>> nums [5, 4, 3, 2, 1] 이제 key 옵션을 살펴봅시다. key 옵션은 정렬 기준을 커스텀 할 때 사용합니다. 아래 예제를 봅시다. 리스트 안에 튜플들이 있고, 각 튜플의 두번째 값을 첫번째 값으로 나눈 값을 오름차순으로 정렬하려면 아래처럼 하면 됩니다. >>> data_list = [(10,10), ..