수색…


소개

OOP 학교에서 온 학생이라면 추상적 인 수업을 전문으로하고 그것을 사용하는 것은 코드를 작성할 때 명심해야 할 연습입니다.

추상적 인 기능을 정의하고 다른 기능을 생성하기 위해 특수화 할 수 있다면 어떨까요? 특정 매개 변수를 바인딩하여 특정 시나리오에 대해 신뢰할 수 있도록하는 일종의 함수 상속 이라고 생각합니다.

통사론

  • 부분 (함수, ** params_you_want_fix)

매개 변수

Param 세부
엑스 제기 할 수
와이 지수
증가 전문화 된 기능

비고

파이썬 문서에 언급 된대로 functools.partial :

호출 될 때 위치 인수 args 및 keyword arguments 키워드로 호출되는 func처럼 동작 할 새로운 부분 객체를 반환합니다. 더 많은 인수가 호출에 제공되면 args에 추가됩니다. 추가 키워드 인수가 제공되면 키워드를 확장하고 무시합니다.

부분 을 구현하는 방법을 보려면 이 링크 를 확인하십시오.

힘을 키우다.

x 를 숫자 y로 올리려고한다고 가정 해 봅시다.

다음과 같이 작성하십시오.

def raise_power(x, y):
    return x**y

y 값이 유한 값 집합을 가정 할 수 있다면 어떨까요?

y[3,4,5] 중 하나가 될 수 있다고 가정 해 봅시다. 최종 사용자가 매우 계산 집약적이므로 그러한 함수를 사용할 가능성을 원하지 않는다고 가정 해 봅시다. 실제로 y 가 유효한 값을 가정하고 함수를 다음과 같이 다시 작성하는지 확인합니다.

def raise(x, y):
    if y in (3,4,5):
        return x**y
    raise NumberNotInRangeException("You should provide a valid exponent")

어질러 놓은? 추상적 인 형식을 사용하고 세 가지 경우 모두에 특화하십시오. 부분적으로 구현합시다.

from functors import partial
raise_to_three = partial(raise, y=3)
raise_to_four = partial(raise, y=4)
raise_to_five = partial(raise, y=5)

여기서 어떻게됩니까? 우리는 y 매개 변수를 고쳤으며 세 가지 다른 함수를 정의했습니다.

위에서 정의한 추상 함수를 사용할 필요가 없습니다 ( private로 만들 수는 있지만) 부분적으로 적용된 함수를 사용하여 숫자를 고정 된 값으로 올리는 것을 처리 할 수 ​​있습니다.



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