목록파이썬/알쓸신잡 (6)
개발자 블로그

함수가 호출되어 저장되어 사용되는 곳이 스택 메모리 영역이다. 재귀함수는 함수가 호출 되면서 함수 자기 자신을 또 다시 호출하는 방식으로 재귀함수 호출 시 스택 메모리에 호출 된 함수들이 계속 쌓이게 된다. 스택은 LIFO(선입선출) 구조이기 때문에 가장 마지막에 호출된 함수 factorial(1)를 먼저 완료하고, 값을 아래로 전달하여 최초로 호출된 함수 factorial(3)가 최종 값을 계산한다. 따라서, 재귀함수를 호출할 때 스택 메모리 공간이 초과되는 스택 오버플로우가 발생되는 오류를 주의하며, 과도한 스택 메모리가 사용되지 않도록 조심하며 사용해야한다.

함수를 정의하고, 파라미터의 기본값을 정의를 하는 경우가 많다. 하지만, 사용 시 주의 사항이 있다. mutable 한 객체를 함수의 디폴트 파라미터로 사용하지 말라는 것이다. 예제를 통해 살펴보자! def add_sharp(s = []): s.append('#') return s s = [1, 2, 3] print(add_sharp(s)) # [1, 2, 3, '#'] print(add_sharp()) # ['#'] print(add_sharp()) # ['#'] print(add_sharp()) # ['#'] 우리가 예상한 결과값은 주석 처리를 한 값이다. 하지만, 실제 결과값은 그렇지 않다. 파이썬에서 함수의 디폴트 인자들은 __defaults__ 또는 __kwdefaults__ 어트리뷰트의 저장된..
파이썬 메모리 구조 Text 영역: 코드 영역이라고 하며 실행할 프로그램의 코드가 저장되는 영역이라고 한다. CPU는 텍스트 영역에 저장 된 명령어를 하나 씩 처리한다. Data 영역: 전역 변수와 정적 변수 즉, globals()에 등록된 변수를 저장하는 영역이며, 프로그램 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. Stack 영역: 지역 변수(함수 내부 변수)와 매개변수 즉, locals()에 등록된 변수를 저장하는 공간이다. 그러므로 당연히 함수가 실행이 될 때 함께 할당이 되고 함수가 종료되면 소멸된다. Heap 영역: 사용자의 동적 할당으로 생성되는 영역이며, 사용자가 공간의 크기를 직접 관리할 수 있다고 한다. 해당 영역의 크기는 프로그램이 실행되는 도중인 런타임 동안 사용자가 직접..

전역 변수는 주로 변하지 않는 고정 값에 사용 지역 변수는 사용 이유: 지역 변수는 함수 내에 로직 해결에 국한, 소멸주기: 함수 실행 해제 시 내가 선언한 변수의 스코프는 적절한지 알고 사용하자. 한번만 선언해도 참조하여 쓸 수 있었는데 여러 곳에서 산발적으로 선언하여 메모리를 불필요하게 사용하진 않았는지 이러한 성능에 대한 고민을 할 필요가 있다. Global 전역 변수를 지역 변수 스코프에서 수정을 하려고 하면 UnboundlocalError를 만난다. 그럴 때 해당 변수를 global로 해당 변수를 지역 내로 불러와 사용할 수 있다. 하지만, 전역 변수를 지역 내에서 수정 되는 것은 지양해야한다. 코드의 수가 몇만줄 또는 여러 사람들과 협업을 해야할 시 다소 혼잡성을 야기할 수 있다. Nonloc..
장고의 프로젝트를 하며 메소드를 커스텀 할 일이 많았다. 기존의 예를 들어 시리얼라이즈의 update 함수를 커스텀 할 때, 기존의 인스턴스를 받아 사용자로 부터 받은 값들을 변경 해주어야하는 함수를 만드는 과정에서 아래와 같은 함수를 알면 좀 이해의 도움이 된다. 그리고 이 외에도 객체의 속성값에 직접 접근하여 값을 수정 및 반환할 수 있지만, 메소드를 사용하여 어트리뷰트의 접근하는 이유는 객체의 본질을 깨지 않게 하기 위함으로 객체가 쉽게 변형이 되지 않게 하기 위함이다. 1. getattr(object, attribute_name [, default]) 매개변수로는 객체와 속성 값의 이름, default를 설정할 수 있고, 해당 어트리뷰트의 value를 가져오는 함수이다. 해당 필드가 없다면 디폴트..