수색…


부분적인

partial 함수는 다른 함수에서 부분 함수 응용 프로그램을 작성합니다. 함수의 인수 (또는 키워드 인수)에 값을 바인딩 하고 이미 정의 된 인수없이 호출 가능 함수를 생성하는 데 사용됩니다.

>>> from functools import partial
>>> unhex = partial(int, base=16)
>>> unhex.__doc__ = 'Convert base16 string to int'
>>> unhex('ca11ab1e')
3390155550

partial() 은 이름에서 알 수 있듯이 함수의 부분적인 평가를 허용합니다. 다음 예제를 살펴 보겠습니다.

In [2]: from functools import partial

In [3]: def f(a, b, c, x):
   ...:     return 1000*a + 100*b + 10*c + x
   ...: 

In [4]: g = partial(f, 1, 1, 1)

In [5]: print g(2)
1112

g 가 만들어지면 네 개의 인수 ( a, b, c, x )를 취하는 f 도 처음 세 개의 인수 인 a, b, c, f 평가는 g 가 호출 될 때 완료되고 g(2)f 네 번째 인수를 전달합니다.

partial 을 생각하는 한 가지 방법은 시프트 레지스터입니다. 당시에 한 가지 논쟁을 일부 기능으로 밀어 넣었다. partial 은 데이터가 스트림으로 들어오고 하나 이상의 인수를 전달할 수없는 경우에 유용합니다.

total_ordering

주문 가능한 클래스를 만들려면 일반적으로 __eq()__ , __lt__() , __le__() , __gt__()__ge__() 메서드를 정의해야합니다.

클래스에 적용된 total_ordering 데코레이터는 __eq__() , __lt__() , __le__() , __gt__()__ge__() 사이에서 __eq__() 의 정의를 허용하며 클래스의 모든 순서 지정 작업을 허용합니다.

@total_ordering
class Employee:

    ...

    def __eq__(self, other):
        return ((self.surname, self.name) == (other.surname, other.name))

    def __lt__(self, other):
        return ((self.surname, self.name) < (other.surname, other.name))

데코레이터는 제공된 메소드와 대수 연산의 조합을 사용하여 다른 비교 메소드를 유도합니다. 예를 들어 우리는 정의 된 경우 __lt__()__eq()__ 우리는 유도 할 __gt__() 우리가 간단하게 확인할 수 있습니다 not __lt__() and not __eq()__ .

참고 : total_ordering 함수는 Python 2.7 이후에만 사용할 수 있습니다.

줄이다

Python 3.x에서 이미 여기에서 설명한 reduce 함수는 내장 함수에서 제거되었으며 functools 에서 가져와야합니다.

from functools import reduce
def factorial(n):
    return reduce(lambda a, b: (a*b), range(1, n+1))

lru_cache

@lru_cache 데코레이터는 가장 최근에 사용하지 않은 캐시를 사용 하여 값 비싸고 계산 집약적 인 함수를 래핑하는 데 사용할 수 있습니다. 이렇게하면 함수 호출을 메모 할 수 있으므로 나중에 동일한 매개 변수를 사용하는 호출을 다시 계산하지 않고 즉시 반환 할 수 있습니다.

@lru_cache(maxsize=None)  # Boundless cache
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

>>> fibonacci(15)

위의 예에서 fibonacci(3) 값은 한 번만 계산되지만 fibonacci 에 LRU 캐시가없는 경우 fibonacci(3) 는 230 번 이상 계산됩니다. 따라서 @lru_cache 는 재귀 함수 나 동적 프로그래밍에 특히 좋습니다. 비싼 함수가 동일한 정확한 매개 변수로 여러 번 호출 될 수 있습니다.

@lru_cache 에는 두 개의 인수가 있습니다.

  • maxsize : 저장할 호출 수입니다. 고유 호출 수가 maxsize 초과하면 LRU 캐시는 가장 최근에 사용 된 호출을 제거합니다.
  • typed (3.3에 추가됨) : 다른 유형의 동등한 인수가 다른 캐시 레코드에 속하는지 여부를 판별하기위한 플래그 (예 : 3.03 이 다른 인수로 계산되는 경우)

캐시 통계도 볼 수 있습니다.

>>> fib.cache_info()
CacheInfo(hits=13, misses=16, maxsize=None, currsize=16)

참고 : @lru_cache 는 사전을 사용하여 결과를 캐시하므로 함수의 모든 매개 변수는 캐시가 작동하도록 해시 가능해야합니다.

@lru_cache 대한 공식 파이썬 문서 . @lru_cache 가 3.2에 추가되었습니다.

cmp_to_key

파이썬은 주요 기능을 받아들이는 방식을 변경했다. 이러한 함수는 값을 받아 배열을 정렬하는 데 사용되는 키를 반환합니다.

이전 비교 함수는 두 개의 값을 취하고 첫 번째 인수가 두 번째 인수보다 작거나 같거나 큰 경우 -1, 0 또는 +1을 각각 반환합니다. 이것은 새로운 키 기능과 호환되지 않습니다.

그것이 functools.cmp_to_key 가 들어있는 곳입니다 :

>>> import functools
>>> import locale
>>> sorted(["A", "S", "F", "D"], key=functools.cmp_to_key(locale.strcoll))
['A', 'D', 'F', 'S']

Python 표준 라이브러리 문서 에서 가져온 예제



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow