031 기존 함수로 새로운 함수를 만들려면? ― functools.partial
functools.partial()은 하나 이상의 인수가 이미 채워진 새 버전의 함수를 만들 때 사용하는 함수이다. ## 문제 다음은 입력한 인수의 합과 곱을 choic ...
wikidocs.net
한 함수에 parameter 를 고정하고 재정의해서 쓰는 lib
전부 고정할 수 도 있고, 하나만 고정 할 수도 있다.
예시_1 :
def add_mul(choice, *args):
if choice == "add":
result = 0
for i in args:
result = result + i
elif choice == "mul":
result = 1
for i in args:
result = result * i
return result
add_mul('add', 1, 2, 3, 4, 5)
add_mul('mul', 1, 2, 3, 4, 5)
예시_2 : 예시 1의 호출 방식을 "add(1, 2, 3, 4, 5)" 이런식으로 바꾸고 싶다면 일반적으로는 이런식으로 짠다.
def add_mul(choice, *args):
if choice == "add":
result = 0
for i in args:
result = result + i
elif choice == "mul":
result = 1
for i in args:
result = result * i
return result
def add(*args):
return add_mul('add', *args)
def mul(*args):
return add_mul('mul', *args)
print(add(1,2,3,4,5)) # 15 출력
print(mul(1,2,3,4,5)) # 120 출력
예시_3 : 자 여기서 partial lib를 쓰면 더 간결하게 쓸 수 있다.
from functools import partial
def add_mul(choice, *args):
if choice == "add":
result = 0
for i in args:
result = result + i
elif choice == "mul":
result = 1
for i in args:
result = result * i
return result
add = partial(add_mul, 'add')
mul = partial(add_mul, 'mul')
print(add(1, 2, 3, 4, 5)) # 15 출력
print(mul(1, 2, 3, 4, 5)) # 120 출력
# -----------------------------------------------------------------------------------
# partial 함수는 간단히 함수화 해주는 기능
def a(choice, x, y):
if choice == 'add':
result = x + y
elif choice == 'mul':
result = x * y
return result
add = partial(a, 'add')
mul = partial(a, 'mul', 1, 1)
print(add(1, 1)) # 2 출력
print(mul()) # 1 출력
partial은 이처럼 하나 이상의 인수를 미리 채운 새 버전의 함수를 만드는 데 유용하다.
'언어 정리 > python_lib,일급함수' 카테고리의 다른 글
with 함수 ( __enter__, __exit__ ) (0) | 2022.09.19 |
---|---|
import contextvars 설명 (2) | 2022.08.28 |
PIL , 출력문 저장 lib(write,print,sys.out) (0) | 2022.08.04 |
pymysql ( + cursor , fetch, ) (0) | 2022.07.30 |
jason_to_str 변환( json.dumps, json.loads ) (0) | 2022.07.25 |
댓글