functools.partial에 대한 문서는 "거의 비슷"이라고 말했다 나는 단지 지시 된 라인을 바꾸어야 만하는 것처럼.구현 functools.partial는
이 코드를 복사 할 때 염려해야 할 다른 기능/문제가 있습니까?
functools.partial에 대한 문서는 "거의 비슷"이라고 말했다 나는 단지 지시 된 라인을 바꾸어야 만하는 것처럼.구현 functools.partial는
이 코드를 복사 할 때 염려해야 할 다른 기능/문제가 있습니까?
_functoolsmodule.c
의 소스 코드를 보면 걱정할 것이별로 없다고 생각합니다.
는 partial
의 모듈 구현 산세 및 repr
을 처리하지만,이 문서에서와 같이 작동 같은 다른 모든 그래서 아마도 그것은 C에서 구현되는 이유는 바로 효율성이다 보인다. 함수 클로저가 아니라 형식이라는 사실도 있습니다.
그러나 문서 예에서 func
, args
및 keywords
은 순수하게 화장품입니다. 실제 functools.partial
인스턴스이므로 오버라이드 할 수 없습니다. 하나 개의 대안은 functools.partial
를 서브 클래 싱하는 것입니다 :
class rpartial(partial):
def __call__(self, *args, **kwargs):
kw = self.keywords.copy()
kw.update(kwargs)
return self.func(*(args + self.args), **kwargs)
하나의 함정은 일부 과제는 다음 예제와 같이 임의의 인수를 처리 할 방법입니다
def f(a,b, *args):
pass
이제 부분적으로 인수 1과 2에 f
을 적용
g = partial(f, 1, 2)
은 무엇인가 b
의 값은 g
에 있습니까? 1입니까, 아니면 여전히 가치를 기다리고 있습니까? 그렇다면 a
값은 얼마입니까? 다른 말로하면, 제공된 인수의 수는 추가 인수로 처리되어야하는 경우가 많습니다.
이 좋은 주석입니다,하지만 난) ('g를 의미하는 synatax를 선언 할 것 == F (1, 2); g (x) == f (x, 1,2); g (x, y) == f (x, y, 1,2)'등등. 이상 할 수는 있지만 체계적입니다. – Dave
내장 된 서브 클래스를 생각하지 않았습니까? 클래스 rpartial (부분) : – Dave
이 매우 중요하지만, 나는 그것을 읽어야 생각 데프 __call __ (자기 * 인수, ** kwargs로) : kw = self.keywords.copy() kw.update (kwargs로) return self.func (* (args + self.args), ** kw) – ishmael
@ishmael 감사합니다. – ecatmur