Python 에서 funtools 모듈 함수 분석

4641 단어 Pythonfunctools
Python 이 자체 적 으로 가지 고 있 는 funtools 모듈 은 자주 사용 하 는 고급 함수,즉 다른 함 수 를 처리 하 는 특수 함 수 를 제공 합 니 다.이 모듈 을 사용 해 호출 가능 한 대상 을 처리 할 수 있다 는 얘 기다.
funtools 모듈 함수 개관
  • functools.cmp_to_key(func)
  • functools.total_ordering(cls)
  • functools.reduce(function, iterable[, initializer])
  • functools.partial(func[, args][, *keywords])
  • functools.update_wrapper(wrapper, wrapped[, assigned][, updated])
  • functools.wraps(wrapped[, assigned][, updated])
  • functools.cmp_to_key()
    문법:functools.cmp_to_key(func)  이 함 수 는 구식 비교 함 수 를 키워드 함수 로 바 꾸 는 데 쓰 인 다.
    구식 비교 함수:두 개의 인 자 를 받 아 비교 결 과 를 되 돌려 줍 니 다.반환 값 이 0 보다 작 으 면 전 자 는 후자 보다 작고 반환 값 이 0 보다 크 면 반대 이 며 반환 값 은 0 과 같 으 면 둘 이 같다.
    키워드 함수:매개 변 수 를 받 아 비교 가능 한 대상 을 되 돌려 줍 니 다.예 를 들 어 sorted(),min(),max(),hepq.nlargest(),hepq.nsmallest(),itertools.groupby()는 모두 키워드 함수 로 사용 할 수 있다.
    Python 3 에 서 는 구식 비교 함 수 를 지원 하지 않 는 곳 이 많 습 니 다.이 때 cmp 를 사용 할 수 있 습 니 다.to_key()를 변환 합 니 다.
    예시:
    
    sorted(iterable, key=cmp_to_key(cmp_func)) 
    
    functools.total_ordering()
    문법:functools.total_ordering(cls)  이것 은 클래스 장식 기로 서 클래스 의 비교 연산 을 자동 으로 실현 하 는 데 쓰 인 다.
    우 리 는 클래스 에서 만eq__() 방법 과 아래 방법 중 임의의lt__(), __le__(), __gt__(), __ge__(),그럼 totalordering()은 남 은 몇 가지 비교 연산 을 자동 으로 실현 할 수 있 습 니 다.
    예시:
    
    @total_ordering
    class Student: 
      def __eq__(self, other):
        return ((self.lastname.lower(), self.firstname.lower()) ==
            (other.lastname.lower(), other.firstname.lower()))
      def __lt__(self, other):
        return ((self.lastname.lower(), self.firstname.lower()) <
            (other.lastname.lower(), other.firstname.lower()))
    
    functools.reduce()
    문법:functools.reduce(function, iterable[, initializer])  이 함 수 는 Python 에 내 장 된 reduce()함수 와 같 으 며,주로 Python 3 을 호 환 하 는 코드 를 만 드 는 데 사 용 됩 니 다.
    functools.partial()
    문법:functools.partial(func[, *args][, **keywords])  이 함 수 는 partial 대상 을 되 돌려 줍 니 다.이 대상 을 호출 하 는 효 과 는 func 함 수 를 호출 하고 위치 매개 변수 args 와 키워드 매개 변수 keywords 를 입력 하 는 것 과 같 습 니 다.이 대상 을 호출 할 때 위치 매개 변 수 를 입력 하면 이 매개 변 수 는 args 에 추 가 됩 니 다.키워드 인자 가 들 어 오 면 키워드 에 추 가 됩 니 다.
    partial()함수 의 등가 실현 은 대체적으로 다음 과 같다.
    
    def partial(func, *args, **keywords): 
      def newfunc(*fargs, **fkeywords):
        newkeywords = keywords.copy()
        newkeywords.update(fkeywords)
        return func(*(args + fargs), **newkeywords)
      newfunc.func = func
      newfunc.args = args
      newfunc.keywords = keywords
      return newfunc
    
    partial()함 수 는 주로'동결'함수 의 일부 매개 변수 에 사용 되 며,매개 변수 가 더 적 고 간단 한 함수 대상 을 되 돌려 줍 니 다.
    예시:
    
    >>> from functools import partial
    >>> basetwo = partial(int, base=2)
    >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
    >>> basetwo('10010')
    18 
    
    
    
    functools.update_wrapper()
    문법:
    functools.update_wrapper(wrapper, wrapped[, assigned][, updated]) 
    이 함 수 는 포장 함수(wrapper)를 업데이트 하여 원 함수 처럼 보이 게 합 니 다.선택 할 수 있 는 매개 변 수 는 원 그룹 입 니 다.assigned 원 그룹 은 원 함수 의 값 을 직접 사용 하여 교체 할 속성 을 지정 합 니 다.updated 원 그룹 은 원 함수 와 대조 하여 업데이트 할 속성 을 지정 합 니 다.이 두 매개 변수의 기본 값 은 각각 모듈 등급 의 상수 입 니 다:WRAPPERASSIGNMENTS 와 WRAPPERUPDATES。전 자 는 포장 함수 에 대한 를 지정 하 였 습 니 다.name__, __module__, __doc__ 속성 은 직접 값 을 부여 하고 후 자 는 포장 함수 에 대한 를 지정 합 니 다.dict__ 속성 업데이트.
    이 함 수 는 주로 장식 기 함수 의 정의 에 사용 되 며 포장 함수 앞 에 있 습 니 다.포장 함 수 를 업데이트 하지 않 으 면 장 식 된 함수 가 가지 고 있 는 메타 정 보 는 원 함수 의 메타 정보 가 아니 라 포장 함수 의 메타 정보 로 변 합 니 다.
    functools.wraps()
    문법:
    functools.wraps(wrapped[, assigned][, updated]) 
    wraps()는 update 를 간소화 하 였 습 니 다.wrapper()함수 호출.그것 은 partial(updatewrapper, wrapped=wrapped, assigned, updated=updated)。
    예시:
    
    >>> 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'
    
    >>> example()
    Calling decorated function 
    Called example function 
    >>> example.__name__
    'example' 
    >>> example.__doc__
    'Docstring' 
    
    
    이 함 수 를 사용 하지 않 으 면 예제 의 함수 이름 은 wrapper 가 되 고 원 함수 example()의 설명 문서(docstring)를 잃 어 버 립 니 다.

    좋은 웹페이지 즐겨찾기