PYTHON

    [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은 같은 객체를 가리키고 있나요?..

    [python] 함수 - 가변 인수

    파이썬 인수에 대해 알아보겠습니다. 파이썬을 활용하다 보면, 아래와 같은 함수 방식으로 인자를 주는 것을 종종 보셨을 겁니다. # 1번 케이스 def function(*args): ...(이하 코드 생략)... # 2번 케이스 def function2(**kwargs): ...(이하 코드 생략)... 이렇게 인수 이름 앞에 * 기호를 붙이면, 이 자리에 여러 개의 인수가 올 수 있습니다. 이것을 '가변 인수'라고 지칭합니다. 가변 인수의 특징은 정해진 개수만큼의 실인수를 전달해야할 필요가 없습니다. 가변 인수는 임의 개수의 인수를 받는 다는 것이 특징입니다. 아래 예를 통해 확인해보겠습니다. def intsum(*ints): sum = 0 for num in ints: sum += num return s..

    파이썬과 객체지향 (python and class) 3 - 생성자(__init__, initializer)

    파이썬을 하다보면 __init__ 이라는 친구를 종종 만나실 수 있습니다. 많은 경우에서 class안에서 가장 처음으로 정의하는 함수 이기도 하죠. 파이썬에서 이친구는 생성자(initializer)라고 불립니다. 이 생성자는 어떨때 쓰일까요? 아래 예제를 통해 한번 살펴보겠습니다. # 자동차 class를 만들어보자. class Car: def set_car_spec(self, brand: str, model: str): self.brand = brand self.model = model def info(self): context = {'brand': self.brand, 'model': self.model} print(context) # ***여기서 self는 class 자체를 지칭한다. my_car =..

    파이썬과 객체지향 (python and class) 2

    파이썬의 class 지난 포스팅에서도 언급했다시피 class는 객체모델링의 수단입니다. 현실세계의 객체를 프로그래밍적으로 묘사하는 방법이죠. 이번 포스팅에선 학생이라는 현실 세계의 개체를 객체를 프로그래밍으로 표현해보겠습니다. 클래스를 만들 때, 두가지 관점에 유의하면 좋습니다. 상태 (인스턴스) 행위 (메서드) 좀 더 구체적으로 묘사하며 학생을 떠올려보겠습니다. 학생은 학년이 있을것이며, 학번이 있고, 전공, 학교, 키, 몸무게, 이름, 주소 등등 여러가지 상태를 갖고 있을 것입니다. 이러한 상태는 “변수”를 만들어줘서 저장을 하게 되는데 이것을 파이썬에서는 “instance variable (인스턴스)” 라고 부른다. (자바나 다른 언어에선 다른 방식으로 이런 상태를 부른다고 합니다) 그렇다면 행위엔..

    파이썬과 객체지향 (python and class) 1

    음.. 필자와 같은 비전공자 출신이 처음 프로그래밍을 접했을 때 당황하는 모먼트가 분명 몇가지 있으리라 생각한다. 혹자가 “처음 프로그래밍을 접하면서 가장 이해 하기 힘든 개념이 무엇이었나요?”라고 묻는다면, 나는 주저없이 class에 관해 얘기를 하지 않을까 싶다. 머릿속으로 이해를 해도 쉽게 생각한 부분이 이미지로 형상화가 잘되지않으며, class안에 있는 속성(instance)와 행위 (method)는 코딩을 할때마다 다시금 “이해를 하고 지금 코딩을 하는것인가?”라고 생각하게 만들었다. 간략하게 필자가 이해한 절차적 프로그래밍(aka 구조적 프로그래밍, 함수지향적 프로그래밍)를 언급, 비교하면서 이번 파이썬의 객체지향에 대해 알아보겠습니다. 절차적 프로그래밍 대표적인 언어: c하나의 기능을 다시 ..

    [python] 해밍 거리 (Hamming Distance) - 동적 계획법

    해밍 거리 (Hamming Distance) 해밍 거리는 문자열 사이의 거리를 정의하는 가장 심플한 방법입니다. 동적 프로그래밍에서 Edit distance를 배울 때 같이 익히는 거리 계산법 중 하나인데요. 해밍거리는 문자열에 포함된 문자를 앞에서부터 하나씩 비교하여 몇 개나 다른가를 출력하는 거리 함수 입니다. 예제를 살펴보겠습니다 123456789 vs 023456789 => 1개의 문자열이 다름 (0과 1) ILOVEYOU vs YLOVEIOU => 2개의 문자열이 다름 (I & Y의 위치가 다름) 보시다시피 간단한 거리 계산 방법입니다. 이를 파이썬의 scipy 패키지를 이용하여 구현해보겠습니다. # 해밍 거리 활용 예제 from scipy.spatial import distance sample..