lang/py

Book 파이썬답게 코딩하기 - 철학과 개념

C/H 2020. 1. 8. 12:43

철학과 개념

파이썬답게 코딩하기

Pythonic

Pythonic의 사전적 정의는 관습적으로 사용되는 파이썬의 사용 방법입니다. 쉽게 말하면 파이썬을 파이썬답고, 파이썬스럽게 사용하기 위한 코드 작성 가이드라인이다.
Pythonista는 Pythonic을 잘 지키면서 코드를 작성하는 파이썬 개발자를 지칭하는 단어입니다.

Nested function

Inner function와 Outer function 으로 내부에 함수를 포함하는 함수를 말한다.
Inner function 은 scope chain에 의해서 자신을 감싸고 있는 outer function의 메모리에 접근 가능.
Nested function

클로저(Closure)

클로저(Closure)는 중첩 함수의 일종으로 개념상 하위 개념이라고 할 수 있다.
클로저를 구현하기 위해서는 중첩된 함수가 필요하기 때문이다.
원래 사전적 의미는 first-class function(일급 함수)을 지원하는 언어에서 유효 범위의 이름을 바인딩하는 기술이다.
기술적으로 클로저는 '함수의 반환값으로 내부 함수를 사용하는 함수'라고 정의할 수 있다.
함수의 반환값으로 내부 함수를 사용하게 되면 first-class function의 속성에 따라 내부 함수를 변수에 저장하고 사용할 수 있다.
Closuer

외부함수 종료

외부함수가 호출되어 내부함수를 반환하고 종료 되었을 때 내부 함수는 다른 변수에 저장되어 사용할 수 있다.
내부함수에서 nonlocal 변수는 외부 함수의 지역변수인데 외부함수는 종료 되었을 경우 이 함수와 관련된 환경을 저장하고 있게 된다.
그래서 외부함수가 종료될 때 관련된 자원은 모두 저장되고, 이를 내부함수가 사용한다.

Closuer Attribute

외부함수가 종료될때 Closure를 위한 외부함수는 어디에 저장될까?
파이썬에서 Object(개체)들은 저마다의 속성(attribute)이 있고, 속성의 closure라는 속성에 저장된다.
파이썬의 built-in 함수 중에 dir함수를 이용해서 개체 속성을 조회할 수 있다.

Partial Application

매개변수의 일부를 미리 전달해서 래핑(wrapping) 함수를 만들고, 이 래핑된 함수를 사용해 가변적인 매개변수만 매개변수로 사용하는 기법이다.
구현하는 방법은 여러가지가 있지만 higher-order function 속성을 이용한다.
Partial Application

_args 와 *_kwargs

가변 인자를 인식하기 위한 핵심은 바로 * 키워드 이다.
흔히 많이 사용하는 이름은 args, kwargs 약어로 args는 arguments, kwargs는 keyword arguments를 뜻한다.
때로는 args, kwars를 사용하기도 한다.
_args는 non-keyworded 가변 인자를 다루고, *_kwargs는 keyworded 가변 인자를 다룬다.

Closure를 이용한 partial Application

closure를 이용할 때 logging과 함께 고정값을 던지고 Closure 함수를 반환받은 뒤 반환 함수를 이용한다.

파이썬 내용 모듈을 이용한 Partial Application

partial application을 구현하려면 higher-order function을 지원해야 하고, 파이썬은 higher-order function을 지원한다.
파이썬은 higher-order function(고차 함수)를 이용한 기능을 모아 별도의 모듈이 있다. 바로 functools 모듈 이다.
functools에는 partial application을 제공한다.

반응형

'lang > py' 카테고리의 다른 글

Book 파이썬답게 코딩하기 - 동시성과 병렬성  (0) 2020.01.13
Book 파이썬답게 코딩하기 - 기본 문법  (0) 2020.01.09
Udemy Download  (0) 2019.04.08
python proxy scraping  (0) 2019.01.29
library Tesseract - OCR test  (0) 2019.01.25