점프투파이썬 스터디 5장 복습 + 되새김 문제

2024. 2. 17. 20:37학습/팀스터디

 

01 도전한 점


  1. from operator import attrgetter : 클래스의 객체를 "기준"에 맞춰 정렬한다.
  2. 짝궁 구하기 코드, 타일 구하기 함수를 제작했다.
  3. itertools.permutations, itertools.combinations 차이 이해하기(되새김 16번)
  4. result = itertools.zip_longest(new_data, role, fillvalue = '휴식') : itertools.zip_longest는 클래스다.
  5. 해당 모듈은 이터레이터 객체 result 를 생성했을 뿐, 값이 생성된 것은 아니다. 아래 참고!

 

02 문제 풀이


 

03 itertools.zip_longest()


  1. itertools.zip_longest() 함수는 이터레이터를 반환하기 때문에, 이터레이터 객체가 생성되었을 뿐 실제로 값을 가져오지는 않는다. 이터레이터 객체는 값을 순회할 때에만 실제 값을 생성한다.
  2. 따라서 print(result)를 호출하면 아무것도 출력되지 않는다. result가 이터레이터 객체일 뿐이고, 아직 값이 생성되지 않았기 때문이다.
  3. 주의할 점은 itertools.zip_longest() 함수가 이터러블을 반환하기 때문에 값을 실제로 확인하려면 result를 반복문으로 순회하거나 이터레이터를 리스트나 튜플로 변환하여 보다 직관적으로 확인할 수 있다.
  4. 점프투파이선 5장 마지막 부분에 Faker 실습코드 보다가 깨달은 건데 해당 코드를 참고하여 이해하시오.

 

 

04 이터레이터 객체와 이터러블 데이터의 차이


이터러블(iterable) 데이터와 이터레이터(iterator) 객체는 파이썬에서 데이터를 순회하고 처리하는 데 사용되는 두 가지 다른 개념이다. 표준 라이브러리를 공부하면서 이터레이터 객체를 배웠는데 보통 반복 가능한 데이터타입을 이터러블 데이터라고 하기에 둘의 차이를 비교해보았다.

 

  • 이터러블(iterable) 데이터
    • 이터러블은 반복 가능한 객체로, 내부에 여러 개의 요소를 포함하고 있다.
    • 리스트(list), 튜플(tuple), 세트(set), 딕셔너리(dictionary) 등이 이터러블 데이터의 예이다.
    • 이터러블은 for 루프에서 직접 사용할 수 있으며, iter() 함수를 통해 이터레이터로 변환될 수 있다.

 

  • 이터레이터(iterator) 객체
    • 이터레이터는 이터러블 데이터를 순회할 때 사용되는 객체로, 데이터의 요소에 접근하는 방법을 제공한다.
    • 이터레이터는 next() 함수를 사용하여 다음 요소에 순차적으로 접근하고, 모든 요소를 순회한 후에는  StopIteration 예외를 발생시킨다.
    • 이터레이터는 iter() 함수를 사용하여 생성할 수 있다.
    • 이터레이터 객체는 반복 과정에서 내부 상태를 유지하므로, 메모리를 효율적으로 사용할 수 있다.

 

간단히 말해, 이터러블 데이터는 반복 가능한 객체 자체를 가리키며, 이터레이터 객체는 반복 과정에서 데이터에 접근하고 처리하는 도구다. 일반적으로 이터러블 데이터를 이터레이터 객체로 변환하여 데이터를 순회하고 처리한다.

 

05 왜? 언제 사용하는가?


  1.  for 루프를 사용하여 순회할 때 파이썬은 내부적으로 이터레이터를 생성한다. 그렇기에 대부분의 경우에는 직접적으로 이터레이터를 생성할 필요는 없다.
  2. 그러나 때로는 데이터를 다루는 과정에서 명시적으로 이터레이터를 생성하는 것이 유용할 수 있다.
  3. 예를 들어, 여러 번 반복되는 데이터 집합을 순회해야 할 때 매번 for 루프를 사용하는 것보다 이터레이터를 생성하여 효율적으로 데이터에 접근할 수 있다.
  4. 또한, 특정 상황에서는 iter() 함수를 사용하여 이터레이터를 생성하는 것이 코드의 가독성을 높일 수 있다.
  5. 따라서 이터레이터를 명시적으로 사용하는 경우는 상황에 따라 다를 수 있겠다.