python 6

Python - yield

파이썬의 리스트는 힙 메모리 영역에 저장되어 있는 객체의 주소를 모아둔 하나의 객체이며 컬렉션(collection)입니다. 파이썬의 리스트는 동적 리스트이며 리스트를 추가하고 제거하는데 인덱스를 걱정할 필요가 없으며 여러 자료형들을 하나의 리스트에 담을 수 있다는 장점이 있습니다.하지만 이런 리스트는 메모리에 저장되기 때문에 메모리를 매우 많이 사용하게 됩니다. 이런 상황을 해결하기 위해서 yield를 사용할 수 있습니다. 1. yield파이썬에서 yield는 제너레이터 함수를 만드는 데 사용하는 키워드입니다.제너레이터는 이터레이터를 생성하는 함수입니다. 여기서 이터레이터는 iterable 한 객체를 __next__ 매직메서드를 사용해서 요소들을 순차적으로 반환시켜 주는 객체입니다.함수에서 yield 키..

python 2024.12.10

Python - 멀티스레드, GIL (Global Interpreter Lock)

1. Python 인터프리터파이썬 인터프리터는 파이썬의 코드를 한 줄씩 읽으면서 실행하는 프로그램을 말합니다. 이 파이썬 인터프리터를 구현한 구현체 중에 하나가 현재 표준 구현체로 사용되고 있는 CPython입니다. GIL은 CPython에서 적용되는 개념입니다. 2. GIL (Global Interpreter Lock)2-1. GIL과 멀티스레딩보통의 멀티 스레딩은 이런 방식으로 작동합니다.여러개의 스레드가 서로 병렬로 동시에 실행되는 것을 말합니다.하지만 파이썬은 조금 다르게 작동합니다.일반적으로 두개의 스레드가 병렬로 작동하는 방식을 사용하지 않고 스레드가 각각 컨텍스트 스위칭을 하며 프로그램을 실행합니다.이 이유는 파이썬에서는 일종의 뮤텍스 역할을 하는 GIL이 있기 때문입니다.GIL은 하나의 자..

python 2024.11.25

Python list append, extend, +=

파이썬에 배열에 값을 추가하는 방법은 append, extend, +=, insert 등등이 있습니다.그 중 append, extende, +=의 차이점을 알아보겠습니다.1. append, +=>>> a = [1, 2, 3]>>> b = [4, 5, 6]>>> a.append(b)>>> print(a)[1, 2, 3, [4, 5, 6]]append를 사용할 시 그 자체를 배열에 원소로 넣습니다.+= 연산자를 사용해도 append와 같은 방식으로 동작합니다.무엇을 넣든 원소 하나로 들어가는 특징이 있습니다. 2. extend>>> a = [1, 2, 3]>>> b = [4, 5, 6]>>> a.extend(b)>>> print(a)[1, 2, 3, 4, 5, 6]extend를 사용하면 배열에 iterabl..

python 2024.10.07

Python mutable 변경 가능, immutable 변경 불가능

파이썬은 다른 언어들과는 다르게 모든 것들이 객체이다. 이 객체들은 python memory manager에서 관리된다.이 객체들의 주소는 id 라는 함수를 통해서 알 수 있다.파이썬엔 mutable 변경 가능, immutable 변경 불가능 객체가 있다.immutableint, floot, bool, str, tuplemutablelist, set, dicimmutable>>> a = 100>>> b = 100>>> c = 100>>> print(id(a), id(b), id(c))439093744043909374404390937440위 코드는 각각 다른 변수들에 100이라는 integer 값을 할당해 주더라도 객체의 주소는 다 같은 걸 볼 수 있다.여기서 python memory manager은 10..

python 2024.09.23

Python 잘 쓰는법: 리스트, 딕셔너리

1. 시퀀스 슬라이싱파이썬엔 시퀀스라는 자료형이 있다.시퀀스는 데이터를 순서대로 담는 자료형이다.문자열: 'Python'파이썬이라는 문자열도 Char의 시퀀스이다.배열: ['a', 'b', 'c']튜플: ('a', 'b', 'c')파이썬엔 이러한 시퀀스를 슬라이싱 할 수 있는 많은 방법이 있다.>>> a = ['a', 'b', 'c', 'd']>>> print(a)['a', 'b', 'c', 'd']>>> print(a[1:5])['b', 'c', 'd']기본적으로 list[시작:끝]으로 쉽게 할 수 있다. 시작 인덱스부터 출력되며 마지막 인덱스는 포함하지 않고 리턴된다.>>> assert a[:1] == a[0:1]>>> assert a[1:] == a[1:len(a)]맨 앞부터 슬라이싱하는경우에는 0..

python 2024.09.09

Python 다중 상속, super()

1. 다중 상속다중상속은 하나의 클래스가 2개 이상의 클래스를 상속받아 자식 클래스를 작성하는것을 말한다.클래스를 생성할때 ()에 클래스 이름을 넣어서 다중상속 클래스를 만든다.>>> class A:... def hello():... print('hello')...>>> class B:... def bye():... print('bye')...>>> class C(A, B):... pass...>>>>>> C.hello()hello>>> C.bye()bye클래스 C는 클래스 A, B의 메서드인 hello, bye 메서드 모두를 갖고 호출할 수 있다.이걸 그림을 간단하게 표현하면 이렇게 볼 수 있다. 2. 다이아몬드 상속>>> class A:..

python 2024.09.02