파이썬 API 둘러보기

functools

reduce(), total_ordering(), wraps(), partial()

고차함수를 먼저 알아야 함.

함수형 프로그래밍이 처음이면 다루기 조금 어려울 수 있다. 

데코레이터는 Aspect-Oriented Programming과 관련 있다.

 

reduce()

내장함수-Iterable-filter(), map(), reduce(), slice()

 

total_ordering()

클래스 데코레이터. 클래스 만들 때, rich comparison operations 중에서

__eq__()와,  __lt__(), __le__(), __gt__(), or __ge__() 중 하나,

그러니까 최소 두 개만 작성하면 나머지를 채워 준다.

여기서 가져온 예제:

@total_ordering
class Student:
    def _is_valid_operand(self, other):
        return (hasattr(other, "lastname") and
                hasattr(other, "firstname"))
    def __eq__(self, other):
        if not self._is_valid_operand(other):
            return NotImplemented
        return ((self.lastname.lower(), self.firstname.lower()) ==
                (other.lastname.lower(), other.firstname.lower()))
    def __lt__(self, other):
        if not self._is_valid_operand(other):
            return NotImplemented
        return ((self.lastname.lower(), self.firstname.lower()) <
                (other.lastname.lower(), other.firstname.lower()))

 

wraps()

데코레이터 만들 때 쓰는데, 왜 필요한지 설명을 찾을 수 있다.

귀찮다면 아래 코드에서 @wrpas 위치만 기억하자:

>>> from functools import wraps
>>> def my_decorator(f):
...     @wraps(f)
...     def wrapper(*args, **kwds):
...         print('Calling decorated function')
...         return f(*args, **kwds)
...     return wrapper
...
>>> @my_decorator
... def example():
...     """Docstring"""
...     print('Called example function')

 

partial()

The partial() is used for partial function application which “freezes” some portion of a function’s arguments and/or keywords

 

함수의 일부 인자의 값을고정시켜서, 호출할 때 필요 없도록 숨겨 준다.

여기의 설명 참고:

from functools import partial

square = partial(power, exponent=2)
cube = partial(power, exponent=3)

def test_partials():
    assert square(2) == 4
    assert cube(2) == 8


출처: http://hamait.tistory.com/823 [HAMA 블로그]

 

댓글

댓글 본문
작성자
비밀번호
버전 관리
장과장02
현재 버전
선택 버전
graphittie 자세히 보기