python
-
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)
-
파이썬 클린코드 3python 2022. 2. 26. 10:10
데코레이터 목표 파이썬에서 데코레이터가 동작하는 방식을 이해 함수와 클래스에 적용되는 데코레이터를 구현하는 방법을 배운다. 일반적인 실수를 피하여 데코레이터를 효과적으로 구현하는 방법을 배운다. 데코레이터를 활용한 코드 중복을 회피(DRY 원칙 준수) 데코레이터를 활용한 관심사의 분리 좋은 데코레이터 사례 데코레이터가 좋은 선택이 될 수 있는 일반적인 상황, 관용구, 패턴 파이썬의 데코레이터 함수와 메서드의 기능을 쉽게 수정하기 위한 수단으로 나옴. original 함수가 있고 그 기능을 약간 수정한 modifier라는 함수가 있다면 원래 아래처럼 썼다.def original(): pass original = modifier(original) - 위 방법은 혼란스럽고 오류가 발생하기 쉽고 번거롭다. - ..
-
파이썬 심화: 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 파일 쓰기, 파일 읽기, 사진 다운받기python 2021. 4. 6. 10:32
1. 파일 쓰기 1-1. 파일 새로 만들기(기존 파일 덮어 씌우기) 파일을 쓸땐 write의 의미로 'w'을 써줍니다.. with open('new_file.txt', 'w') as f: f.write("Hello world!\n") f.write("Nice to meet you\n")이렇게 하면 f.write안의 내용을 담은 new_file.txt라는 파일이 생깁니다.. 똑같은 명령어를 또 치면 파일이 덮어씌어집니다.. 1-2. 기존 파일에 내용 추가하기 덮어쓰기를 하지 않고 아래에 내용을 추가 하려면, 'w' 대신 add의 의미로 'a'를 써줍니다. with open('new_file.txt', 'a'..