[파이썬 중급] #4_1. 일급함수 & 클로저 기초
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)
- 가급적 함수를 작성하고, 꼭 필요한 경우에만 익명함수 이용
- 일반 함수 형태로 리팩토링 권장
- 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을 쓰면 클래스를 함수처럼 사용할 수 있다
-클래스 인스턴스를 함수처럼 사용하고 있다(위의 문장과 거의 동일)