728x90

파이썬 19

[Python] iterable? iterator?

iterable? iterator? iterable의 의미는 요소를 하나씩 차례로 반환 가능한 object를 뜻한다. iterable의 예로는 sequence type인 list, str, tuple 등이 있고, non-sequence type인 dict나 file도 iterable 하다고 말할 수 있다. (for문을 통해 순차 접근 가능) 또한, __iter__() 나 __getitem__() 메서드를 포함하는 class는 모두 iterable하다고 말할 수 있다. iterator 객체는 __next__() 메서드로 iterable한 객체의 데이터에 순차적으로 접근할 수 있다. 만약 __next__()로 다음 데이터를 불러올 수 없을 경우 StopIteration exception을 발생시킨다. 그렇다..

🐍Python | Django 2022.05.08

[Python] GIL

먼저 GIL에 대해 알아보기 전에 파이썬 인터프리터에 대해 한 번 짚고 넘어가자. 인터프리터란 파이썬으로 작성된 코드를 한 줄씩 읽으며 실행하는 프로그램을 말하는데, 현재 파이썬 인터프리터의 표준 구현체로 받아들여지고 있는 것은 C언어를 이용하여 구현한 CPython이다. GIL은 Global Interpreter Lock의 약자이다. 파이썬의 객체들에 대한 접근을 보호하는 일종의 뮤텍스(Mutex)로써, 여러 스레드가 동시에 파이썬 코드를 실행하지 못하도록 막는 것이다. 뮤텍스(Mutex)란, 멀티 스레딩 환경에서 여러 개의 스레드가 어떤 공유 자원에 접근하려 할 때 접근하기 위해 가지고 있어야 하는 키 같은 것이다. 식당에서 공용 화장실을 사용하기 위해 열쇠를 들고 화장실을 가고, 사용 중인 사람이 ..

🐍Python | Django 2022.05.07

[Python] Python의 메모리 관리

파이썬에서는 모든 것이 객체이고, 동적 메모리 할당이 파이썬 메모리 관리의 기초이다. 동적 메모리 할당이랑 런타임 시 메모리가 할당되는 것으로 객체가 더 이상 필요하지 않으면 파이썬 메모리 관리자가 자동으로 객체에서 메모리를 회수한다. 메모리 관리는 reference counting과 generational garbage collection 두 가지 방법으로 이루어 진다. Reference Counting 파이썬에서는 객체를 만들 때마다 객체의 유형과 reference count를 private heap에 생성한다. 기본적으로 파이썬 객체의 reference count는 객체가 참조될 때마다 증가하고 객체의 참조가 해제될 때 감소하는 방식으로 작동하고, 이때 reference count가 0이 되면 객체..

🐍Python | Django 2022.05.03

[Python] call by value? call by reference?

일반적으로 사용되는 함수 인자 전달 방식은 call by value, call by reference 두 가지이다. call by value는 함수의 인자를 받을 때, 변수에 담긴 값 자체를 복사하여 넘겨주므로 함수 내에서 해당 인자를 조작하여 바꿔도 원본은 변하지 않는다. 원본을 건드리지 않아 안전하지만, 함수의 사용으로 해당 전역 변수를 바꾸고자 하는 경우에는 리턴 값을 다시 전역 변수로 집어넣어야 하는 번거로움이 있을 수 있다. call by reference는 함수의 인자를 받을 때, 변수가 가리키는 주소 값을 전달함으로써, 함수 내에서 해당 인자를 조작하면 원본 변수의 주소 값으로 타고 들어가 해당 값 자체를 변경시킨다. 그렇다면 파이썬은 call by value일까? call by refere..

🐍Python | Django 2022.04.28

[Python] 메타클래스(MetaClass)

메타클래스에 대해 알아보기 전에 먼저 객체와 인스턴스에 대해 한번 짚고 넘어가자. 클래스로 만든 객체를 인스턴스라고 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? 예를 들어 a = Person() 이렇게 만든 a는 객체이다. 그리고 a 객체는 Person의 인스턴스이다. 즉, 인스턴스라는 말은 특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 사용된다. 파이썬에서의 모든 것은 객체이다. 따라서 클래스도 객체이다. 그렇다면 클래스를 만들기 위한 클래스가 필요하다는 말이 되는데, 클래스를 만들기 위한 클래스는 무엇일까? 바로 이것이 메타클래스이다. 메타클래스는 우리가 재정의해주지 않으면 기본적으로 클래스를 만드는 클래스로 정해져 있다. 만약, 특정 클래스를 만들 때, 특별한 규칙을 적용하고 ..

🐍Python | Django 2022.04.27

[Python] main 함수

파이썬에는 main 함수가 따로 존재하지 않는다. 파이썬으로 개발을 하다보면 if __name__ == '__main__': 으로 시작하는 구문을 만날 수 있는데, 이 구문이 의미하는 것이 현재 파일이 프로그램의 시작점이 맞는지 판단하는 것이다. # main.py def main(): print('This is Main Function') if __name__ == '__main__': main() # 실행 결과 # $ python main.py # $ This is Main Function 위와 같이 사용할 수 있다. 파이썬에서 Main함수는 이렇게 사용하는구나~ 하고 넘어갈수도 있지만 조금 더 자세히 알아보자. # addition_module.py def add(a, b): return a + b #..

🐍Python | Django 2022.04.26

[Python] Class와 상속(Inheritance)

파이썬에서의 상속이란 부모 클래스의 속성과 함수를 그대로 물려 받는 것이다. 자식 클래스에서는 물려받은 부모 클래스의 속성과 함수를 사용할 수 있다. class Parent: def __init__(self, name='짱구', age=5): self.name = name self.age = age def introduce(self): print(f'내 이름은 {self.name}이고, 나이는 {self.age}살이야.') class Child: def __init__(self): super().__init__() child = Child() child.introduce() # 내 이름은 짱구이고, 나이는 5살이야. 일반적인 메서드 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의 하는 것이고,..

🐍Python | Django 2022.04.19

[Python] Decorator

Decorator란 이미 작성된 함수에 새로운 기능을 추가하여 함수를 확장시키는 개념으로, 일반적으로 함수의 전처리나 후처리에 대한 필요가 있을 경우 사용한다. 함수명 위에 @데코레이터로 사용할 함수 이름을 적어주면 된다. 예시를 보자. 만약, 서버에서 사용자에 관련된 메서드를 만든다고 하면 다음과 같은 순서로 처리하게 될 것이다. # 1. 권한체크 (전처리) # 2. 요청에 대한 처리 (본 로직) # 3. 로그 수집 또는 오류 처리 (후처리) def create_user(*args): if check_auth(): # main logic log() def update_user(*args): if check_auth(): # main logic log() def delete_user(*args): if ..

🐍Python | Django 2022.04.18
728x90