📌함수도 객체
파이썬에서는 클래스도, 함수도, 변수도 모두 객체이다.
따라서 함수의 파라미터로 전달할 인자로 함수도 전달할 수 있다.
📌람다 함수
이름이 없는 함수지만 한 번만 사용하기 위해서 사용하는 함수가 람다함수이다.
함수도 객체이므로 람다함수를 변수에 저장해서 사용할 수 있다.
# 전달받은 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()함수에 넣었을 때 반환되는 객체였다.
제너레이터를 만들기 위한 방법은 두 가지이다.
- 제너레이터 함수
- 제너레이터 표현식 → 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이라고 한다.
제너레이터는 값을 하나씩 꺼내기만 하는 경우 적절하다.
값을 미리 생성해두지 않기 때문에 메모리 공간을 절약할 수 있기 때문이다.
'객체 지향 프로그래밍 > Python' 카테고리의 다른 글
패킹과 언패킹 이해하기 (0) | 2021.03.16 |
---|---|
map과 filter 함수 활용하기 (0) | 2021.03.15 |
리스트 컴프리헨션으로 가독성 높이기 (0) | 2021.03.13 |
얕은 복사, 깊은 복사란? (4) | 2021.03.11 |
변경 불가능한 자료형 주의하기 (0) | 2021.03.10 |