반응형
파이썬 함수에서 주어진 값에 인수를 바인딩하는 방법은 무엇입니까?
이 질문에 이미 답변이 있습니다.
위치 및 키워드 인수가 조합 된 여러 함수가 있으며 인수 중 하나를 지정된 값 (함수 정의 후에 만 알려짐)에 바인딩하고 싶습니다. 그렇게하는 일반적인 방법이 있습니까?
나의 첫 번째 시도는 :
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
partial
functools 에서 함수를 원할 것입니다 .
MattH의 답변 에서 제안했듯이 functools.partial
갈 길입니다.
그러나 귀하의 질문은 "어떻게 구현할 수 있습니까 partial
" 로 읽을 수 있습니다 . 어떤 코드가없는 것은 사용하는 것입니다 *args
,**kwargs
: 실제로, 2 개 등 사용 -
def partial(f, *args, **kwargs):
def wrapped(*args2, **kwargs2):
return f(*args, *args2, **kwargs, **kwargs2)
return wrapped
당신은 사용할 수 있습니다 partial
및 update_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)
반응형
'Nice programing' 카테고리의 다른 글
ImageMagick을 사용하여 더 큰 캔버스 안에 이미지 배치 (0) | 2020.12.07 |
---|---|
Java에서 고유 한 컴퓨터 식별자 (예 : 디스크 ID 또는 마더 보드 ID)를 얻는 방법은 무엇입니까? (0) | 2020.12.07 |
AES / CBC 및 AES / ECB 암호화 후 데이터 크기 (0) | 2020.12.07 |
부트 스트랩 서버에 com.XXXXX.deviceapp을 등록 할 수 없습니다. (0) | 2020.12.07 |
자바 컴파일러에 의한 최적화 (0) | 2020.12.07 |