파이썬기초

    [python] 파이썬 class의 __call__ 함수 (매직메소드)

    파이썬을 다루다보면 __call__함수에 직면하는 경우가 생깁니다. 저와 같은 데이터 사이언티스트의 경우에는 __call__함수는 Tensorflow의 def call() 메서드나 PyTorch의 def forward() 메서드가 대표적이라고 할 수 있는데요. 인스턴스를 생성하고 자동으로 클래스의 객체도 호출할 수 있게 만드는 기능입니다. 아래처럼 리스트를 받아 난수 10개를 뿌려주는 난수생성기 클래스로 표현되었다고 생각해봅시다. 인스턴스 메서드 구현 아래처럼 pick 메서드를 활용할 때, 출력물이 생성되고, 10개의 난수를 담은 리스트가 리턴되는 것을 확인할 수 있습니다. import random class RandomNumberReturn: def __init__(self): self.numbers ..

    [python] stack 구현 (고정길이 스택 fixed stack, class 활용)

    (본 포스팅은 Do It! 시리즈의 '자료구조와 함께 배우는 알고리즘 입문 - 파이썬편'을 참고하여 작성하였습니다.) 데이터를 임시 저장하는 기본 자료 구조는 대표적으로 두 가지가 있는데, 스택(stack)과 큐(queue)이다. 스택은 일반적으로 데이터 입력과 출력 순서가 후입선출(Last in First Out)인 것이 특징이다. 이 기능을 구현하기 위해서 우리가 생각해봐야할 부분은 어떤 것이 있을까? 크게 살펴보자면 첫째로, 데이터를 집어 넣는 push 기능 둘째로, 데이터를 꺼내는 pop 기능 셋째로, 스택의 길이를 알려주는 len 기능 넷째로, 스택이 비었는지 확인하는 기능 다섯번 째로, 스택이 가득 차 있는지 확인하는 기능 여섯번 째로, 특정 값이 스택 어디에 위치해있는지 확인하는 기능 일곱번..

    [python] 파이썬 Class 내 self.<variable name>에서 self 키워드는 어떤 역할을 할까?

    파이썬 클래스를 처음 접하다보면, 추상적인 개념에 적잖이 당황할 수도 있습니다. 특히 class를 만들 때, class안에 함수를 정의할 때 self 라는 키워드를 많이 보셨을 겁니다. 이 self는 굉장히 중요한 역할을 하게 되는데, 무엇을 의미하는지 간단하게 알아보도록 하겠습니다. self라는 키워드는 클래스가 만들어진 이후, 인스턴스로서 활용될 때 굉장히 중요한 역할을 합니다. 이때 class variable과 instance variable에 대해 알아야 할 필요가 있는데, 간단하게 말해서 self가 활용된다면 이는 곧 class 전역에 영향을 미치는 것이 아닌 인스턴스에만 국한되어 작동하게 됩니다. 예시 1) class_variable vs instance_variable 코드를 보면서 살펴보겠..

    [python] finally 블록 - 파이썬의 자원정리 방법

    파이썬으로 작업하다보면 예외 처리시, finally 블록을 사용하는 것을 곧잘 목격할 수 있습니다. finally는 언제 사용하는 것일까요? 이 finally 블록은 예외 발생 여부와 상관없이 반드시 실행해야 할 명령을 지정합니다. 이해를 돕기 위해 예를 들어보겠습니다. 어떠한 데이터 분석과제를 위해 모든 gpu자원을 하나의 계정(user A)으로 할당해주었습니다. 그렇다면 동일한 서버 내 다른 유저(user B)는 사용중인 gpu에 접근할 수 없을 것입니다. 이때 만약에 user A가 딥러닝을 돌려놓고 밥먹으러 나갔다면, 또는 외출했다고 가정해보겠습니다. user B는 gpu를 활용해야 하지만, user A가 사용하고 있어서 활용하지 못하게 됩니다. 하지만 user A의 딥러닝 코드가 에러가 났다면, ..

    [python] is 연산자란?

    파이썬에서 is 연산자는 두 변수가 같은 객체를 가리키고 있는지 확인할 때 is 구문을 사용한다. 그렇다면 is 연산자와 같음을 나타내는 == 연산자의 차이점은 무엇일까? 아래 코드를 통해 이해해보자. # 3개의 리스트 생성 list1 = [1, 2, 3] # 리스트 할당 list2 = list1 # 리스트1을 대입 받는 방식으로 리스트2 생성 list3 = list1.copy() # 리스트1의 사본을 리스트3의 값으로 할당 print('list1 과 list2는 같은 객체를 가리키고 있나요? : ', list1 is list2) print('list1 과 list3은 같은 객체를 가리키고 있나요? : ', list1 is list3) print('list2 와 list3은 같은 객체를 가리키고 있나요?..