자유/대외 활동

파이썬 중급, 인프런 리프 #3. 파이썬 시퀀스, 파이썬 일급 함수 후기

Chipmunks 2021. 3. 29. 01:19
728x90

반갑습니다람쥐, 인프런 리프 2기 다람쥐입니다!

세 번째 주차에는 파이썬 시퀀스와 파이썬 일급 함수를 공부했어요.

파이썬 시퀀스 강의에선 컨테이너와 해시 테이블을 배웠어요.

파이썬 일급 함수 강의에선 함수의 특징과 클로저, 데코레이터를 실습했어요.

어떤 점을 새로 배웠는지 후기를 작성해 보려고 해요.

 

파이썬 시퀀스 강의에선 컨테이너의 종류가 많아서 직접 따라 치다보니 자연스럽게 머리에 들어왔네요.

전반적으로 강의 흐름이 적절해서 하루 하루 학습할 수 있어서 좋았습니다.

 

※ 본 리뷰는 인프런, 우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original) 강의를 리뷰하였어요.

 

[진도표]

우리를 위한 프로그래밍 : 파이썬 중급 1주차

  1. 파이썬 중급 소개 & 커리큘럼
  2. 파이썬 클래스 심화
  3. 파이썬 데이터 모델
  4. 파이썬 시퀀스현재
  5. 파이썬 일급 함수현재
  6. 파이썬 병행성
  7. 최종 실습 - AsyncIO 멀티 스크래핑 실습

4. 파이썬 시퀀스

시퀀스형의 종류 중 컨테이너와 플랫을 배웠어요.

컨테이너는 서로 다른 자료형을 저장할 수 있고, 플랫은 한 개의 자료형만 저장할 수 있는데요.

컨테이너로는 list, tuple, collections, deque 등이 있고,

플랫은 str, bytes, bytearray, array.array, memoryview 등이 있다고 하네요.

 

시퀀스형은 또 가변인지, 불변인지로 나누어져요.

tuple, str, bytes 자료형은 불변이고

list, bytearray, array.array, memoryview, deque 등은 가변이라고 하네요.

 

리스트를 실습하며 파이썬에서 유용하게 쓰이는 Comprehensive List 를 실습했는데요.

저도 편리하고 가독성도 좋아 실무에서 많이 애용하고 있어요.

Comprehensive List 로 구현하는 방법과 필터와 람다 함수로 구현하는 법을 배웠어요.

예시와 더불어 주석으로 설명을 덧붙여 주셔서 따라가는 데 무리가 없었어요~

code_list3 = [ord(s) for s in chars if ord(s) > 40]

 

파이썬 제너레이터로 메모리를 효율적으로 사용하며 대용량을 처리하는 법을 배웠어요.

그냥 리스트로 메모리에 한 번에 대용량을 불러오면, 자원을 효율적으로 쓰지 못하기에

파이썬 제너레이터로 꼭 구현을 해야 하는데요,

파이썬 제너레이터는 어떻게 만들어야 하는 지 쉽게 알 수 있었어요.

# Generator 생성 
import array

# Generator : 한 번에 한 개의 항목을 생성(메모리 유지X)
tuple_g = (ord(s) for s in chars)

 

리스트를 곱하기 연산과 같이 사용할 때의 주의점은 흥미로웠어요.

깊은 복사와 얕은 복사의 개념을 알 수 있었고 리스트에선 얕은 복사가 진행되는 상황이 있어 위험하다는 것을 알 수 있었어요.

# 리스트 주의
marks1 = [['~'] * 5 for n in range(5)]
marks2 = [['~'] * 5] * 5

print(marks1)
print(marks2)

print()

# 수정
marks1[0][1] = 'X'
marks2[0][1] = 'X'

print(marks1)
print(marks2)

# 증명
print([id(i) for i in marks1])
print([id(i) for i in marks2])

두 번째로 sort() 함수로 리스트를 어떻게 정렬하는 지 배웠어요.

sorted() 함수에서 key 매개변수는 잘 쓰지는 않았었는데,

이번 기회에 key 매개변수로 다양한 상황의 정렬을 할 수 있다는 것을 배웠네요.

개인적으로 헷갈렸던 sorted() 함수와 sort() 메서드의 차이점도 알 수 있었습니다!

# sorted : 정렬 후 새로운 객체 반환
f_list = ['orange', 'apple', 'mango', 'papaya', 'lemon', 'strawberry', 'coconut']

print('sorted -', sorted(f_list))
print('sorted -', sorted(f_list, reverse=True))
print('sorted -', sorted(f_list, key=len))
print('sorted -', sorted(f_list, key=lambda x: x[-1]))
print('sorted -', sorted(f_list, key=lambda x: x[-1], reverse=True))

마지막으로 딕셔너리 심화를 배웠는데, 읽기 전용인 딕셔너리를 만들 수 있다는 점을 새로 배웠어요.

읽기 전용으로 튜플로 억지로 만들어 사용을 했었는데, 다음 기회엔 딕셔너리 그대로 읽기 전용으로 만들어보면 좋을 것 같네요.

# immutable Dict
from types import MappingProxyType

d = {'key1': 'value1'}

# Read Only
d_frozen = MappingProxyType(d)

print(d, id(d))
print(d_frozen, id(d_frozen))
print(d is d_frozen, d == d_frozen)

# 수정 불가
# d_frozen['key1'] = 'value2'

파이썬 시퀀스 한 챕터에서 흔히 알던 시퀀스 뿐 아니라 다양한 자료형들을 깊게 알 수 있었네요.

파이썬 시퀀스가 아리송하다 하시는 분들은 꼭 파이썬 시퀀스 강의를 참고하세요~

 5. 파이썬 일급 함수

파이썬에서 함수를 어떻게 관리하고 취급하는지 알 수 있었어요.

함수를 객체로 취급하여 변수에 할당할 수도 있고 여러 속성들도 가지고 있다는 것을 배웠네요.

print(factorial(6))
print(factorial.__doc__)
print(type(factorial), type(A))
print(set(sorted(dir(factorial))) - set(sorted(dir(A))))
print(factorial.__name__)
print(factorial.__code__)

map, filter, reduce 등의 고위 함수 (higher-order function) 들을 실습하였는데요,

어떻게 고위 함수들을 해석하는지, 또는 실제로 실습해보며 어떻게 조합하여 간단하게 결과를 뽑을 수 있을지 쉽게 알 수 있었어요.

고위 함수 다음엔 클로저를 학습하여 클로저는 왜 알아야 하는지, 실제로 어떻게 쓰이는지 확인할 수 있었어요.

더불어 함수형 프로그래밍의 특징도 언급해줘서 많이 배울 수 있었네요.

 

동시성 제어할 때 메모리 공간에 여러 자원이 동시에 접근하면, 교착상태(데드락)가 발생하여 애플리케이션에 장애가 일어날 수 있는데요,

불변 자료구조를 적극적으로 사용하고 클로저를 공유하여 안정성 있는 멀티스레드 프로그래밍과 함수형 프로그래밍을 할 수 있다고 해요~

 

마지막으로는 데코레이턴데, 데코레이터는 서버 프레임워크에서 유용하게 썼던 경험이 있어요.

데코레이터의 장단점을 바로 알고 실제로 파이썬 데코레이터를 실습해볼 수 있어서 좋았어요.

# 직접 만든 데코레이터
@perf_clock
def time_func(seconds):
    time.sleep(seconds)

@perf_clock
def sum_func(*numbers):
    return sum(numbers)

본 리뷰는 인프런, 우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original) 강의를 리뷰하였어요.

독자분들도 같의 강의를 듣고 서로 모르는 부분은 이야기 해보면 좋을 것 같아요.

다 같이 성장할 수 있도록 저도 열심히 학습하겠습니다!

다음 시리즈 글도 기대 부탁드려요~

 

- 인프런 리프 2기 시리즈 글

1. 파이썬 중급, 인프런 리프 #1. 파이썬 환경 설정 후기

 

파이썬 중급, 인프런 리프 #1. 파이썬 환경 설정 후기

안녕하세요, 인프런 리프 2기 다람쥐예요! 첫 주차에는 파이썬 환경 설정을 들었어요. 제가 설정한 파이썬 환경 설정을 이야기해보려고 해요. 동영상 강의와 다른 내용도 있기에 관련 자료도 열

itchipmunk.tistory.com

2. 파이썬 중급, 인프런 리프 #2. 파이썬 클래스 심화, 데이터 모델 후

 

파이썬 중급, 인프런 리프 #2. 파이썬 클래스 심화, 데이터 모델 후기

안녕하세요, 인프런 리프 2기 다람쥐예요! 두 번째 주차에는 파이썬 클래스 심화와 데이터 모델을 공부했어요. 파이썬 클래스 심화에선 클래스 변수, 인스턴스 메서드, 클래스 메서드, 스태틱

itchipmunk.tistory.com

3. 파이썬 중급, 인프런 리프 #3. 파이썬 시퀀스, 파이썬 일급 함수 후기 <- 현재

 

파이썬 중급, 인프런 리프 #3. 파이썬 시퀀스, 파이썬 일급 함수 리뷰

반갑습니다람쥐, 인프런 리프 2기 다람쥐입니다! 세 번째 주차에는 파이썬 시퀀스와 파이썬 일급 함수를 공부했어요. 파이썬 시퀀스 강의에선 컨테이너와 해시 테이블을 배웠어요. 파이썬 일급

itchipmunk.tistory.com

4. 파이썬 중급, 인프런 리프 #4. 파이썬 병행성, 비동기 AsyncIO 멀티 스크랩핑 실습 후기

 

파이썬 중급, 인프런 리프 #4. 파이썬 병행성, 비동기 AsyncIO 멀티 스크랩핑 실습 후기

안녕하세요. 인프런 리프 2기 다람쥐입니다. 네 번째 주차에는 파이썬 병행성과 비동기 AsyncIO 멀티 스크랩핑을 공부했어요. 파이썬 병행성 강의에선 많은 것을 배웠는데요, 먼저, 첫 강의에선

itchipmunk.tistory.com

5. 파이썬 중급, 인프런 리프 #5. 인프런 리프 2기 활동 후기

 

파이썬 중급, 인프런 리프 #5. 인프런 리프 2기 활동 후기

안녕하세요, 🐿다람쥐입니다! 🌱인프런 리프 2기 🌱를 시작한 지 벌써 한 달이 지났네요. 글 보러가기 : [대학생 IT 온라인 서포터즈] 🌿 인프런 리프 2기 진솔한 오리엔테이션 회고 [대

itchipmunk.tistory.com