초록매실 일상소화 블로그

데이터공부/파이썬

파이썬 스킬업 4장, 그리고 제너레이터 & 이터레이터

꽁종대 2022. 6. 27. 22:05

오랫만에 파이썬 공부를 시작했다.

이제는 제대로 파이썬을 써봐야 하는데 기본적인 지식 만으로는 가능은 하지만, 뭔가 비효율적으로 우겨 넣는듯한 그런 느낌이 들어서 더 나은 공부들이 뭐가 있는지 알아봤다. 

 

확실히 내가 아는 것은 거의 새발의 피 정도라는 사실을 깨달았다. 

그래서 찬찬히 하는 공부를 조금 적어놓으면서 나의 파이썬 지식을 성장시키면서 이해를 해봐야 겠다는 다짐으로 조금씩 적어봐야겠다.

 

앞에 했던 1,2, 3 장은 너무나 많은 정보들이 있을 것 같아서 4장부터 차근차근 배웠던 키워드를 정리하면서 시작해보려고 한다.

모든 내용은 문과적인 성향이 강한 필자의 주관적 내용이며, 정확한 내용을 기록하기 보단 배우고 학습한 내용을 되돌아보기 위한 기록입니다. 틀린 사항이 있다면 당신의 의견이 맞을 수도 있습니다.

 

이번 4장의 주요 내용은

제너레이터

데코레이터

로 꼽아 볼 수 있겠다. 이 세가지만 알아도 내가 그동안 파이썬에 얼마나 무지했는지를 깨달았다. 

 

간략히 정리해보면서 되돌아보고자 한다.

 

1. 제너레이터

파이썬을 하면서 아직 제대로 써본적은 없지만, 뭔가 파이썬의 본격적인 면모를 보여준다고 생각되는 기능.

그동안은 함수를 보면서 파이썬은 함수 만능이라는 생각을 하고 함수로 모든 것을 만들구나 하는 이런 문과 만능주의적인 생각을 품었었지만, 객체를 생성하면서 다양한 순서를 출력할 수 있는 그런 기능(?)

시퀀스 데이터를 다루면서도 하나하나 처리하고 싶을 때, 하나씩 불러와서 처리해주는 그런 것이라고 한다.

이터레이터의 경우는 한번에 하나씩 값을 생산하여 나열된 값의 묶음을 만들어 준다면, 제너레이터는 말그대로 제너레이션을 일으켜 이것이 하나하나 불러올 수 있도록 기능하는 그런 객체라고 정의할 수 있다.(내가 썼는데도 정확히 무슨 말인지는 이해가 가지 않는다.) 제너레이터는 이터레이터를 "만드는" 그런 객체라고 할 수 있다.

yield 를 통해 생성이 가능하며, 함수를 정의하는 것이 아닌 하나하나 불러올 수 있는 공장을 세운다고 보면 된다. 이후 객체가 호출될 경우 하나씩 불러오는 기능을 하는 제너레이터의 역할을 수행한다는 것

처음 접해서 명확히 이해하기는 어렵지만 그래도 뭔가 영어로 제너레이션 하는 객체라고 이해하니 조금은 와닿은듯 하다.

 

2.데코레이터

파이썬에도 이런 다양한 객체들이 정의되어서 활용되고 있었다는 것을 놀랍게 배웠다. 특히 지금 적는 데코레이터의 경우는 실제로 작업할때 다양한 작업을 하는 경우가 많은데, 이를 통해서 감싸면 정말 빠르게 데코레이터가 되는구나 하는 것을 깨닫게 되었다. 당장 내일 출근해서 활용할 수 있을 만큼 실용적으로 와닿은 객체.

그래서 데코레이터란, decorate, 꾸며주는 객체를 의미한다. 무엇을 꾸며주는가 하면 바로 함수를 꾸며주는 것이 이 데코레이터의 역할이다. 

꾸미는 것은 포장이라고 생각하면 조금 이해가 쉽다. 기존에 있던 함수를 꾸며주는(감싸주는) 기능을 통해, 새로 호출된 함수에서 활용될 수 있는 객체의 형태로 정의된것이 데코레이터라고 할 수 있다.

책에서 예시로 드는 함수의 시간을 재는 기능을 매번 함수 위에 함수 적고 시간 적는 기능 귀찮다고 생각하고 있었는데, 이 데코레이터를 통해 단 한줄로 여러줄의 코드를 간편하게 정의할 수 있을거 같아서 되게 유익하게 다가왔다.

 

나머지 기능들도 다양하게 배웠는데,

파이썬의 코딩을 정확히 하기 위한 지름길로 적힌 22가지 방법을 알게되었는데 실용적으로 와닿을 수 있는 그런 내용들이었다. 참으로 유용하게 배울 수 있는 그런 항목들이었다. 하지만 책의 본문에 있는 내용들이므로 실제로 알려면 책을 보는게 나을거 같아 적지 않겠다.(절대 귀찮은건 아니다)

 

이 외에도 커맨드 라인의 변수 활용, 파이썬 패키지로 기본 제공되는 것들과 그동안 무심코 썼던, from 패키지 와 같은 사항들을 한번 더 심층깊게 알아가면서 왜 그런 걸 쓰면서 패키지를 불러오는지, 어떻게 하면 효율적인 패키지들을 사용하면서 코딩실력을 늘릴 수 있는지 알아가는 시간이 되었다.

 

이제 한 장 했는데 생각보다 많은 것을 얻어가고 있다. 앞으로 좀 더 찬찬히 파이썬에 대해 심도깊은 이해를 해보고싶은 생각이 들었고, 아직 내가 정말 모르는게 많았던 상태에서 기고만장했구나 하는 겸손함을 얻는 기회가 되었다. 

 

정말 성실하게 이 게시글들을 하루하루 적을 수 있는 그런 능력을 발휘했으면 좋겠다. 아니라면 이런거 적는 의미가 없으니 말이다 흑흑..... 검색어 떡상과 스스로의 지적 효용을 높일 수 있는 계기가 되길 바라며 오늘의 파이썬 공부 기록은 끝