Nice programing

파이썬 함수에서 주어진 값에 인수를 바인딩하는 방법은 무엇입니까?

nicepro 2020. 12. 7. 20:38
반응형

파이썬 함수에서 주어진 값에 인수를 바인딩하는 방법은 무엇입니까?


이 질문에 이미 답변이 있습니다.

위치 및 키워드 인수가 조합 된 여러 함수가 있으며 인수 중 하나를 지정된 값 (함수 정의 후에 만 ​​알려짐)에 바인딩하고 싶습니다. 그렇게하는 일반적인 방법이 있습니까?

나의 첫 번째 시도는 :

def f(a,b,c): print a,b,c

def _bind(f, a): return lambda b,c: f(a,b,c)

bound_f = bind(f, 1)

그러나이를 위해서는에 전달 된 정확한 인수를 알아야 f하며 단일 함수를 사용하여 관심있는 모든 함수를 바인딩 할 수 없습니다 (다른 인수 목록이 있기 때문에).


>>> from functools import partial
>>> def f(a, b, c):
...   print a, b, c
...
>>> bound_f = partial(f, 1)
>>> bound_f(2, 3)
1 2 3

partialfunctools 에서 함수를 원할 것입니다 .


MattH의 답변 에서 제안했듯이 functools.partial갈 길입니다.

그러나 귀하의 질문은 "어떻게 구현할 수 있습니까 partial" 로 읽을 수 있습니다 . 어떤 코드가없는 것은 사용하는 것입니다 *args,**kwargs : 실제로, 2 개 등 사용 -

def partial(f, *args, **kwargs):
    def wrapped(*args2, **kwargs2):
        return f(*args, *args2, **kwargs, **kwargs2)
    return wrapped

당신은 사용할 수 있습니다 partialupdate_wrapper주어진 값에 인수를 결합하고 보존 __name__ 하고 __doc__원래의 기능 :

from functools import partial, update_wrapper


def f(a, b, c):
    print(a, b, c)


bound_f = update_wrapper(partial(f, 1000), f)

# This will print 'f'
print(bound_f.__name__)

# This will print 1000, 4, 5
bound_f(4, 5)

참고 URL : https://stackoverflow.com/questions/3188048/how-to-bind-arguments-to-given-values-in-python-functions

반응형