• 이터레이터(Iterator), 제네레이터(Generator)

 

-파이썬 반복 가능한 타입: collecions,text file, list, Dict, Set, Tuple, Unpaccking, *args

-가능한 이유: iter() 함수 호출하기 때문

 

 

  • 반복, next() 이해

-순서대로 알파벳 출력되다가 더이상 출력할 문자 없으면 break 실행 

 

  • 반복형 속성 여부 확인하는 방법 3가지

 

  • Generator Pattern 장점

1. 지능형 리스트, 딕셔너리, 집합 -> 데이터 증가 후 메모리 사용량 증가 -> 제네레이터 사용 권장함

2. 다위 실행 가능한 코루틴 구현과 연동

3. 작은 메모리 조각 사용

 

  • 제네레이터 예제(텍스트 넣어서 연습)

 

 

  • 병행성(Concurrency): 한 컴퓨터가 여러 일을 동시에 수행 -> !단일! 프록램 안에서 여러일을 쉽게 해결하는 것
  • 병렬성(Parallelism): 여러 컴퓨터가 여러 작업을 동시에 수행 -> 속도 향상 

 

  • 예제1 

이 부분은 잘 이해가 안감,,,,
이부분도 정확히 이해가 안감

 

  • Generator Ex3 
  • 중요함수: count, takewhile,filterfalse, accumulate, chain, product, groupby

 

 

 

 

  • itertools.accumulate(): 반복문에서 값 하나씩 더해나감

 

  • itertools.chain()

 

 

  • itertools.product()

 

  • groupby(): 같은 문자들로 하나씩 묶는다 

Chapter 05

Part 03. 

 

  • Closure 예제 

 

  • function inspection 

 

  • 잘못된 클로저 사용 

 

  •  

 

Part 04 

 

  • 데코레이터
  • 장점
  • (1) 중복제거, 코드 간결, 공통 함수 작성 할 수 있다 
  • (2) 로깅, 프레임웤, 유효성 체크... -> 공통 기능으로 요약가능하다 (따로 분리 가능) 
  • (3) 조합해서 사용하기가 용이하다 
  • 단점
  • (1) 가독성 감소(상황에 따라 다름)
  • (2) 특정 기능에 한정된 함수는 단일 함수로 작성하는 것이 유리할 수도 있음
  • (3) 디버깅 불편 

 

  • 데코레이터 실습

 

  • 데코레이터 사용해서 함수 구현

  • 데코레이터 미사용

 

  • 데코레이터 사용 

 

Chapter05

 

Part01. 일급함수

  • 일급함수(일급 객체) -> 함수형 프로그래밍을 가능하게 한다
  • 공부한 날짜: 2021.11.17

 

  • 파이썬 함수 특징: (되도록이면 눈에 익히게 여러번 보기)
  • 1. 런타임 초기화
  • 2. 변수할당 가능 
  • 3. 함수 인수 전달 가능(함수를 파라미터로 전달할 수 있다는 말?) 
  • 4. 함수 결과 반환 가능 

 

  • 팩토리얼 함수 구현

- print( set(sorted(dir(factorial))) - set(sorted(dir(A))) ) : 함수가 가진 클래스 속성 없애기 / 함수만이 가진 속성 출력 

-__name__ : 함수 이름 알아낼 수 있음

-__code__: 코드정보 알 수 있음. 자료형. 코드 위치 등(맞나?)

 

  • 함수를 변수로 할당할 수 있음 ( 변수 = 함수)

 

-map() 함수에 대해서 알아보기 (출처: https://blockdmask.tistory.com/531)

+ map () 함수 모양: map(function, iterable #반복가능한 자료형)

+ map함수의 반환 값은 map 객체 이기 때문에 해당 자료형을 list 혹은 tuple로 형 변환 시켜줘야함 

+ 동작: 두번째 인자로 들어온 반복 가능한 자료형을 첫번째 인자로 들어온 함수에 하나씩 집어넣어서 함수를 수행함

+ map()함수를 이용하면 반복문 따로 구현하지 않아도 된다(장점)

 

  • lambda(),filter(), 함수 변수 할당 이용해서 구현 

-filter(): 파라미터에 해당하는 거 빼고 나머지를 함수에 대입하는 함수(?)

-print([var_func(i) for i in range(1,6) if i%2]) : i%2가 1이면 True. 따라서 홀수만 반복문에 적용. 0이면 False이므로 짝수를 이용하지 않음 

 

  • 익명함수 (lambda)
  • 가급적 함수를 작성하고, 꼭 필요한 경우에만 익명함수 이용
  • 일반 함수 형태로 리팩토링 권장 

1부터 10까지 더하는 방식 두가지 형태로 구현

- reduce(): functools 내장모듈의 함수. 여러개의 데이터를 대상으로 주로 누적 집계를 내기 위해서 사용.

초기값을 기준으로 데이터를 루프 돌면서 집계 함수를 계속해서 적용하면서 데이터를 누적하는 방식으로 작동한다

- 형식: reduce(집계함수, 순회 가능한 데이터[ ,초기값])

(출처: https://www.daleseo.com/python-functools-reduce/)

 

  • partial 함수 

- five는 입력숫자*5를 의미한다 

 

Part 02. 클로저 기초 

  • Ex1. 정의되지 않은 변수있으면 함수 실행 불가능함 

 

  • Ex2. b변수 정의 되어있을 때 

 

  • Ex3.  gloabl keyword 이해하기/ local이랑 gloabl 개념 알아두기 / 변수의 scope에서 closure가 시작된다

- local variable nonpriority 있을 오류 발생

-local variable priority 있으면 정상 작동 

 

  • global keyword (권장되는 방법은 아님/ 나중에 숙련도 쌓이면 생각해보기)

 

  • 이해를 돕기 위한 출력 결과 

 

 

  • Closure: 메모리를 공유하지 않고 메시지 전달로 처리하기 위한 여러 언어가 나왔음 -> Erlang
  • Closure(클로저) 사용 이유: 불변 상태를 기억하기 위해서
  • Closure는 메모리를 공유하되 변경되지 않는 (Immutable, Read Only) 구조를 적극적으로 사용 -> 함수형 프로그래밍
  •  서버 프로그래밍 -> 동시성(Concurrency) 제어-> 메모리 공간에 여러 자원이 접근 -> 교착상태(deadlock), racecondition
  • Closure는 불변자료구조 및 atom(원자성, 일관성), STM을 이용 -> 멀티스레트(Coroutine)프로그래밍에 강점

 

  • 클로저 함수로 구현

 

  • 인스턴스 생성(함수를 변수로 할당하는건가?)

-callable을 쓰면 클래스를 함수처럼 사용할 수 있다

-클래스 인스턴스를 함수처럼 사용하고 있다(위의 문장과 거의 동일)

Chapter 04

 

Part 03

  • 공부한 날짜: 2021.11.16
  • 해시테이블(정말 중요!!!)
  • 해시테이블이 중복되었을 때 처리 방법(면접 필수 질문 아마존/구글)
  • key에 value를 저장하는 구조
  • 파이썬 dict가 해쉬 테이블의 예
  • 키 값의 연산 결과에 따라 직접 접근이 가능한 구조
  • key 값을 해싱 함수 -> 해쉬 주소값이 나오고 -> 이걸 기반으로 key에 대한 value 참조

 

  • Hash 값 확인
  • 튜플은 고유하므로 고유한 hash값 출력
  • List mutable -> hash 함수 사용 못함

  • t1 해시값 출력 

 

  • Setdefault 예시 

 

Part 04

 

  • 해시테이블(Hashtable) -> 적은 리소스로 많은 데이터를 효율적으로 관리
  • Dict -> Key 중복 허용 하지 않음, Set -> 중복 허용 하지 않음
  • Dict 및 Set 심화
  • 읽기 전용으로 list, set을 만들어보는 연습 

 

  • Read Only(Frozen), immutable Dict -> 읽기 전용의 테이블을 만든다 & 변경을 불가하게 만듦 

- 딕셔너리는 변경가능? 근데 frozen은 변경 안됨 

 

  • frozen은 add attribute가 없어서 데이터 추가 불가능
  • 정말 중요한 데이터나 유일한 값, 중요한 역할을 하는 값은 frozen으로 설정하기

 

  • 출력결과 

 

  • 선언 최적화
  • 바이트 코드를 실행 후 어셈블링해서 파이썬 인터프리터가 바이트를 실행
  • 바이트 코드 생성 순서를 볼 수 있음 

 

  • 지능형 집합 (Comprehending Set) 

+ Recent posts