잘못된 수의 인수 또는 정의에없는 키워드 인수를 사용하여 함수를 호출하면 TypeError가 발생합니다. 콜백을 지원하고 가변 인수를 사용하여 코드를 호출하는 코드를 원합니다. 한 가지 방법은 콜백 cb
에 대해 cb.__code__.cb_argcount
과 cb.__code__.co_varnames
을 사용하는 것입니다. 그러나 나는 이것을 apply
과 같은 것으로 추상화 할 것이지만 "적합"한 인수 만 적용합니다. 예를 들어TypeError를 호출하지 않고 잘못된 수의 인수로 파이썬 함수를 호출 할 수 있습니까?
:
def foo(x,y,z):
pass
cleanvoke(foo, 1) # should call foo(1, None, None)
cleanvoke(foo, y=2) # should call foo(None, 2, None)
cleanvoke(foo, 1,2,3,4,5) # should call foo(1, 2, 3)
# etc.
이미 파이썬에서이 같은 일이 있나요, 아니면 내가 처음부터 작성해야 뭔가?
getargspec은 (__magic__ 물건을 볼 필요가 없습니다 예를 들어,). 필자가 제안한대로 ("a"오타가 아닌 "k"가 아닌) args라는 이름의 필터를 사용하려고합니다. 길이가 아닌 일반 args - 호출에 인수가 충분하지 않으면 None을 채우고 여분을 잘라냅니다 인수. 어쩌면 나는 장식 자로도 만들 것이다. :) –
두 번째 생각에, 당신은 내가 이것을 아주 분명하게 만들지 않았 음이 틀림 없다 (내 머리 속에서도). 콜백은 디폴트, * args, ** kwargs의 다른 조합을 가지고 있습니다 ... –
Heh, 오타가 수정되었습니다. 그것에 대해 더 생각해 본 결과 이름이 지정된 args에 중점을 두는 것이 좋은 생각이라고 생각합니다. 위치와 이름을 섞으면 항상 까다 롭습니다. 내 코드의 한 가지 중요한 개선 사항은 다음과 같습니다. 인수 a가 기본값을 가지며 d가 아닌 경우 내 코드가 (.get에 의해) 수행하지 않고 강제로 None으로 설정하십시오. –