함수형 파이썬 프로그래밍 (파이썬으로 배우는 쉬운 함수형 프로그래밍)

함수형 파이썬 프로그래밍 (파이썬으로 배우는 쉬운 함수형 프로그래밍)

$32.15
Description
파이썬은 배우기 쉽고 확장성과 생산성이 높은 언어로 다양한 분야에서 활용된다. 파이썬의 여러 기능 중에는 함수형 프로그래밍과 잘 어울리는 것이 많다. 이 책 『함수형 파이썬 프로그래밍』에서는 최근 인기가 높아진 함수형 프로그래밍 기법을 파이썬으로 적용하는 방법을 알려준다. 먼저 함수형 프로그래밍에 대해 소개하고, 일급 시민 함수와 고차 함수 등 기본적인 함수형 프로그래밍 개념을 파이썬으로 활용하는 방법을 설명한 다음, 제네레이터나 이터레이터 등을 활용해 성능과 개발 편의성을 동시에 잡을 수 있는 함수형 프로그래밍 기법을 알려준다. 그 과정에서 데이터 탐색과 관련된 다양한 예제를 통해 데이터를 정리하고 준비하는 함수형 프로그래밍 기법이 인공지능이나 머신 러닝에서 활용할 때 아이디어를 간결하고 우아하게 코딩할 수 있는 좋은 도구가 될 수 있음을 보여준다.
저자

스티븐로트

저자스티븐로트(StevenF.Lott)는컴퓨터가커다랗고,비싸고,드물었던1970년대부터프로그래밍을해왔다.소기업에서대기업에이르기까지수많은프로젝트에서계약직소프트웨어개발자로일해왔으며,파이썬을사용해10년넘게비즈니스문제들을해결해왔다.특히데이터를멋지게표현하는데에능숙하다.또한에이콘출판사에서나온『객체지향파이썬』(2017)과『유쾌한파이썬』(2015)의저자이기도하다.그는미국동부지방의여기저기를떠도는디지털유목민으로십여년간지낸후마침내체서피크만에뿌리를내렸다.http://slott-softwarearchitect.blogspot.com이그의기술블로그다.

목차

1장,함수형프로그래밍소개
__패러다임구별하기
__명령형패러다임구분하기
__함수형패러다임사용하기
__함수형혼합체사용하기
__객체생성살펴보기
__거북이의스택
__함수형프로그래밍의고전적인예제
__탐색적자료분석
__요약

2장,함수형기능소개
__일급계층함수
____순수함수
____고차함수
__변경불가능한데이터
__엄격한평가와엄격하지않은평가
__명시적루프상태대신재귀사용
__함수형타입시스템
__낯익은영역
__어려운개념남겨두기
__요약

3장,함수,반복자,제네레이터
__순수함수작성하기
__일급계층객체인함수
__문자열사용하기
__tuple과namedtuple사용하기
____제네레이터식사용하기
____제네레이터의한계
____제네레이터식조합하기
__제네레이터함수를사용해원자료정리하기
__list,dict,set사용하기
____상태가있는매핑사용하기
____bisect모듈을사용해매핑만들기
____상태가있는집합사용하기
__요약

4장,컬렉션으로작업하기
__함수의다양성에대한정리
__반복가능객체로작업하기
____XML파일구문분석하기
____파일을상위수준에서구문분석하기
____시퀀스의원소를둘씩짝짓기
____iter()함수를명시적으로사용하기
____단순한루프확장하기
____제네레이터식을스칼라함수에적용하기
____축약으로any()와all()을사용하기
____len()과sum()사용하기
____통계에합계와원소개수활용하기
__zip()을사용해시퀀스를구조화하거나펼치기
____튜플로묶은시퀀스를다시풀기
____시퀀스펼치기
____평평한시퀀스구조화하기
____평면시퀀스구조화하기-다른방법
__순서를바꾸기위해reversed()사용하기
__enumerate()를사용해인덱스번호포함시키기
__요약

5장,고차함수
__max()와min()을사용해최댓값,최솟값알아내기
__파이썬의람다식사용하기
__람다와람다대수
__map()함수를사용해함수를컬렉션에적용하기
____map()에람다형식사용하기
__map()을여러시퀀스에활용하기
__filter()를사용해데이터를받아들이거나거부하기
__filter()를사용해이상값식별하기
__iter()함수와끝을표시하는특별한값사용하기
__sorted()를사용해데이터정렬하기
__고차함수작성하기
__고차매핑과필터작성하기
____매핑하면서데이터풀기
____매핑하면서추가데이터를감싸기
____매핑하면서데이터를펼치기
____걸러내면서데이터구조화하기
__제네레이터함수작성하기
__Callable로고차함수만들기
____좋은함수형설계를보장하기
__디자인패턴살펴보기
__요약

6장,재귀와축약
__수를계산하는간단한재귀
____꼬리재귀호출구현하기
____재귀를그대로남겨두기
____처리하기어려운꼬리재귀다루기
____재귀를사용해컬렉션처리하기
____컬렉션에대한꼬리호출최적화
____축약과겹치기-많은값을한가지값으로줄이기
__그룹만들기축약-많은값을좀더적은값으로줄이기
____Counter로매핑만들기
____정렬을사용해매핑만들기
____키값에따라데이터를그룹화하거나분할하기
____더일반적인그룹화축약작성하기
____고차축약함수작성하기
____파일구문분석기작성하기
________CSV파일구문분석하기
________헤더가있는일반텍스트파일구문분석하기
__요약

7장,튜플을사용하는다른기법
__변경불가능한이름있는튜플을레코드로사용하기
__함수형생성자로이름있는튜플만들기
__상태가있는클래스사용을피하기위해튜플사용하기
____통계적인순위할당하기
____상태를바꾸는대신감싸기
____상태를바꾸는대신다시감싸기
____스피어맨순위상관계수계산하기
__다형성과파이썬다운패턴매치
__요약

8장,itertools모듈
__무한반복자로작업하기
____count()로개수세기
____cycle()을사용해순환되는원소를계속반복하기
____repeat()로단일값반복하기
__유한한반복자사용하기
____enumerate()로수할당하기
____accumulate()로현재까지의합계구하기
____chain()으로반복자조합하기
____groupby()로반복자분할하기
____zip_longest(),zip()을사용해반복가능객체합치기
____compress()로걸러내기
____islice()로부분집합선택하기
____dropwhile()과takewhile()로상태를사용해걸러내기
____걸러내기위한두가지접근방법인filterfalse()와filter()
____starmap()과map()을사용해함수를데이터에적용하기
__tee()를사용해반복자복제하기
__itertools요리법
__요약

9장,더많은itertools사용기법
__데카르트곱열거하기
__곱을축약하기
____거리계산하기
____모든픽셀과모든색얻기
____성능분석
____문제를다시배열하기
____두가지변환조합하기
__값의컬렉션순열구하기
__모든조합구하기
__요리법
__요약

10장,functools모듈
__함수도구
lru_cache로결과캐시하기
__완전한순서가정해져있는클래스정의하기
____수클래스정의하기
__partial()로인자중일부만적용하기
__데이터집합을reduce()를사용해축약하기
____map()과reduce()조합하기
____reduce()와partial()사용하기
____원데이터를정리하기위해map()과reduce()사용하기
____groupby()와reduce()사용하기
__요약

11장,데커레이터설계기법
__고차함수로서의데커레이터
____functools의update_wrapper()함수사용하기
__횡단관심사
__합성설계
____잘못된데이터처리하기
__매개변수를데커레이터에추가하기
__좀더복잡한데커레이터구현하기
__설계의한계를인식하기
__요약

12장,다중프로세스와스레드모듈
____동시성의진정한의미는무엇인가?
____경계조건
____프로세스나스레드사이에자원공유하기
____어디서이익이누적되는가?
__다중프로세싱풀과작업사용하기
____여러큰파일처리하기
____로그파일구문분석하기-행수집하기
____로그항목을이름있는튜플로만들기
____Access객체의추가필드구문분석하기
____자세한접근정보걸러내기
____자세한접근정보분석하기
____완전한분석프로세스
__동시처리에다중프로세스풀을사용하기
____apply()를사용해단일요청만들기
____map_async(),starmap_async(),apply_async()사용하기
____더복잡한다중프로세스구조
____concurrent.futures모듈사용하기
____concurrent.futures스레드풀사용하기
____스레드와큐모듈사용하기
____동시처리설계하기
__요약

13장,조건식과연산자모듈
__조건식평가하기
____엄격하지않은딕셔너리규칙활용하기
____참인조건식컬러내기
__람다대신operator모듈사용하기
____고차함수를사용할때이름있는애트리뷰트가져오기
__연산자를사용한starmap
__연산자를사용해축약하기
__요약

14장,PyMonad라이브러리
__다운로드및설치하기
__함수적합성과커링
____커링한고차함수사용하기
____더어려운방식으로커링하기
__함수적합성과PyMonad곱셈연산자
__펑터와적용가능펑터
____지연List()펑터사용하기
__모나드의개념과bind()함수,이진오른쪽시프트연산자(>>)
__모나드를사용해시뮬레이션구현하기
__추가PyMonad기능들
__요약

15장,웹서비스에대한함수적접근
__HTTP요청-응답모델
____쿠키로상태주입하기
____서버를함수형으로설계하기
____함수적인관점에서더깊이살펴보기
____서비스내포시키기
__WSGI표준
____WSGI처리도중에예외발생시키기
____실용적인WSGI애플리케이션
__웹서비스를함수로정의하기
____WSGI애플리케이션만들기
____원데이터얻기
____필터적용하기
____결과직렬화하기
____데이터를JSON이나CSV로직렬화하기
____데이터를XML로직렬화하기
____HTML로데이터직렬화하기
__사용량추적하기
__요약

16장,최적화와개선
__메모이제이션과캐싱
__메모이제이션특화시키기
____꼬리재귀최적화
__메모리최적화
__정확도최적화
____고객의요구에맞춰정확도를감소시키기
__사례분석-카이제곱을사용한결정
____원데이터를Counter객체를사용해걸러내고축약하기
____요약한데이터읽기
____Counter객체에서확률계산하기
____다른요약방법
__예상값을계산하고분할표표시하기
____카이제곱값계산하기
____카이제곱문턱값계산하기
____부분감마함수계산하기
____완전한감마값계산하기
____임의적인분포의확률계산하기
__요약

출판사 서평

★이책에서다루는내용★

■파이썬의제네레이터함수와제네레이터식을사용해엄격하지않은방법으로(지연계산을활용)컬렉션을다루는방법
■itertools,functools,multiprocessing,concurrent.futures등파이썬라이브러리모듈을사용한효율적인함수형프로그램작성방법
■객체지향적인전위표기법과후위표기법을통해파이썬문자열을활용하는방법
■튜플종류를활용해상태가있는클래스사용을피하는방법
■합성함수를만들기위해데코레이터를설계하고구현하는방법
■max(),min(),map(),filter(),sorted()와같은함수를사용하는방법
■고차함수를작성하는방법

★이책의대상독자★

이책은함수형프로그래밍에서디자인패턴과기법을빌려간결하고이해하기쉬운파이썬프로그램을작성하고자하는프로그래머를위한것이다.함수형스타일을사용하면일부알고리즘을우아하게기술할수있다.그러한알고리즘을사용하는경우에는파이썬프로그램의가독성을높이고유지보수를쉽게하기위해함수형스타일을채택할수있고,채택해야만한다.
어떤문제를함수형으로접근하면매우성능이뛰어난알고리즘을만들수있는경우가있다.파이썬에서는메모리와처리시간을높일가능성이있는큰중간데이터구조를만들어내기가쉽다.함수형프로그래밍디자인패턴을활용하면,큰리스트를같은내용을쉽게표현하면서도훨씬더작은메모리를차지하고실행시간도더짧은제네레이터식으로바꿀수있다.

★이책의구성★

1장,‘함수형프로그래밍소개’에서는함수형프로그래밍을특징짓는몇가지기법을소개한다.각각을파이썬으로구현하는몇가지방법을식별하고,파이썬애플리케이션을만들기위해함수형프로그래밍의디자인패턴을도입하며,그장점을살릴수있는몇가지방법을설명한다.
2장,‘함수형기능소개’에서는함수형프로그래밍패러다임의여섯가지주요특징을살펴본다.각각을파이썬으로구현하는방법을자세히살펴본다.또한특징중일부는파이썬에잘들어맞지않는다는것을보여줄것이다.예를들면,많은함수형프로그래밍언어에는컴파일과최적화를지원하기위한복잡한타입지정규칙이있지만,파이썬은그렇지않다.
3장,‘함수,반복자,제네레이터’에서는불변적인파이썬객체와제네레이터식을활용하고,함수형프로그래밍의개념을파이썬에도입하는방법을보여준다.내장파이썬컬렉션을살펴보고,이를함수형프로그래밍의개념에서크게벗어나지않고활용하는방법도살펴본다.
4장,‘컬렉션으로작업하기’에서는내장파이썬함수를사용해데이터의컬렉션에대한작업을수행하는방법을보여준다.이장은any(),all()과같은,값의컬렉션을축약해단일값을만들어내는상대적으로간단한함수몇가지에초점을맞출것이다.
5장,‘고차함수’에서는map()과filter()와같이일반적으로사용하는고차함수를살펴본다.또한다른고차함수도몇가지다루고,우리스스로고차함수를작성하는방법에대해서도설명할것이다.
6장,‘재귀와축약’에서는재귀를사용하는알고리즘을설계하는방법을보여주고,이를고성능for루프를사용해최적화하는방법을설명한다.또한collections.Counter()를포함한여러가지축약함수도살펴본다.
7장,‘튜플을사용하는다른기법’에서는불변튜플과이름있는튜플을상태가있는객체대신활용하는여러가지방법을보여준다.불변객체는훨씬단순한인터페이스를제공한다.그래서애트리뷰트를잘못사용하거나객체를일관성이없거나잘못된상태로만들가능성에대해걱정하지않아도된다.
8장,‘itertools모듈’에서는itertools표준라이브러리모들이제공하는몇가지함수를살펴본다.이들을활용하면컬렉션이나제네레이터함수를다루는프로그램을쉽게작성할수있다.
9장,‘더많은itertools사용기법’에서는itertools모듈이제공하는조합함수에대해설명한다.이러한함수들은조금덜유용하다.이장에서는이러한함수를부주의하게사용함으로써조합으로인한폭발적인복잡도증가가발생하는경우를보여주는예제를다룬다.
10장,‘functools모듈’에서는함수형프로그래밍을위해그모듈에있는함수를활용하는방법을보여준다.이모듈에있는함수중몇가지는데커레이터를만들때사용하기적합하므로11장에서다룬다.하지만나머지함수는함수형프로그램을설계하고구현할수있는몇가지방법을제공한다.
11장,‘데커레이터설계기법’에서는데커레이터를합성함수제작을위한방법으로사용할수있다는것을보여준다.이러한사용방법은상당한유연성을가지고있지만,개념적인한계도존재한다.또한지나치게복잡한데커레이터가유용성을제공하기보다는혼동을야기할수있는몇가지이유를살펴본다.
12장,‘다중프로세스와스레드모듈’에서는함수형설계를잘하면,그결과로처리부하를분산시킬수있다는사실을알려준다.불변객체를사용한다는것은잘못동기화한쓰기연산으로인해객체가오염되는일이없다는뜻이다.
13장,‘조건식과연산자모듈’에서는파이썬의엄격한평가순서를깰수있는방법을보여준다.하지만그러한방면에서우리가할수있는일은한계가있다.또한operator모듈을살펴보고,몇가지간단한처리를수행할때그모듈을사용하면더명확하게프로그램을짤수있음을보여준다.
14장,‘PyMonad라이브러리’에서는PyMonad라이브러리의기능을일부살펴본다.PyMonad는몇가지함수형프로그래밍기능을추가제공한다.또한이라이브러리를활용하여모나드를배울수있다.일부함수형언어에서는최적화시원하지않는순서로뒤섞일수있는연산의순서를정확하게지정하기위해모나드를사용해야만한다.하지만파이썬은이미식과문장의엄격한실행순서를지키기때문에모나드를배우는것은실용성을위해서라기보다는교육적인목적을위해서다.
15장,‘웹서비스에대한함수적접근’에서는웹서비스를요청을응답으로변경하는여러가지함수를내포하는컬렉션으로정의할수있다는사실을확인한다.또한동적으로사용자요청에응답하는웹콘텐츠를만들때함수형프로그래밍의개념을활용할수있는방법을살펴본다.
16장,‘최적화와개선’에서는성능과최적화를위한조언을제공한다.구현하기쉽고,(올바른맥락에서활용하기만하면)성능을극적으로향상시켜줄수있는메모라이제이션(memorization)등의기법을강조할것이다.