객체 지향 프로그래밍/Python

파이썬에서는 모든 것이 객체!

ghtis1798 2021. 3. 14. 01:42

📌함수도 객체

파이썬에서는 클래스도, 함수도, 변수도 모두 객체이다.

따라서 함수의 파라미터로 전달할 인자로 함수도 전달할 수 있다.

📌람다 함수

이름이 없는 함수지만 한 번만 사용하기 위해서 사용하는 함수가 람다함수이다.

함수도 객체이므로 람다함수를 변수에 저장해서 사용할 수 있다.

# 전달받은 string의 길이를 측정하는 함수 ref
ref = lambda x: len(x)
print(ref('String value'))
# 공백 포함 12 출력

📌스페셜 메서드

스페셜메서드란 인터프리터가 호출하는 메서드이다.

대표적으로 len() 함수, 리스트의 pop(), insert(), append() 등의 메서드가 있다.

📌Iterable 객체

Iterable 객체는 반복 가능한 객체이다.

예를 들어 리스트, 딕셔너리, 튜플, 문자열 등이 있다.

📌Iterator 객체

Iterator 객체는 Iterable객체를 iter() 함수로 반환된 객체이다.

Iterable 객체인지 확인하는 방법은 iter()함수의 매개변수로 전달해보는 것이다.

Iterator 객체 역시 iter()함수의 매개변수로 올 수 있다.

📌제너레이터 객체

제너레이터란 Iterator 객체 중 하나이다.

Iterator 객체는 Iterable 객체를 iter()함수에 넣었을 때 반환되는 객체였다.

제너레이터를 만들기 위한 방법은 두 가지이다.

  1. 제너레이터 함수
  2. 제너레이터 표현식 → how?

📌제너레이터 함수

제너레이터 함수는 yield를 포함하고 있는 함수이다.

def get_num():
    print('first number')
    yield 1
    print('second number')
    yield 2
    print('third number')
    yield 3
def show_all(s):
    for x in s:
        print(x)
get = get_num()
show_all(s)

제너레이터 함수를 사용하면 메모리를 더 효율적으로 사용할 수 있지만

함수를 별도로 정의해야 한다.

📌제너레이터 표현식

제너레이터 표현식은 리스트 컴프리헨션 식과 매우 유사하지만 제너레이터 객체를 반환한다.

def show_all(s):
    for x in s:
        print(x)
g = (2*i for i in range(1,10))
show_all(g)
show_all(2*i for i in range(1,10))

📌제너레이터 장점

제너레이터를 사용하면 실행의 흐름을 next 함수가 호출될 때까지 늦출 수 있다.

이를 lazy evaluation이라고 한다.

제너레이터는 값을 하나씩 꺼내기만 하는 경우 적절하다.

값을 미리 생성해두지 않기 때문에 메모리 공간을 절약할 수 있기 때문이다.