일반적으로 쓸 일이 많지는 않지만, 함수를 higher-order function 형태 (lambda, decorator 등 함수 자체를 하나의 객체로 취급하는 경우)로 쓰다 보면, 기존 함수를 재활용하는 경우가 왕왕 있습니다. 한 가지 예는 기존 함수의 특정 인자를 특정값으로 고정시키는 경우죠.
예를 들어, 아래와 같은 코드를 보겠습니다.
def print_characters(char, repeat):
print(char * repeat)
print_characters('*', 10)
**********
별을 10개가 아니라 20개를 출력하고 싶다면?
print_characters('*', 20)
그런데 왜인지 무조건 별을 20개 출력하는 함수를 만들고 싶어졌습니다.
def print_characters_20_times(char):
print(char * 20)
print_characters_20_times('*')
이렇게 함수를 새로 만들 수도 있습니다.
또 다른 방법으로 functools.partial 을 이용해서 기존 함수를 재활용할 수도 있습니다.
import functools
print_characters_20_times = functools.partial(print_characters, repeat=20)
print_characters_20_times('*')
이렇게요. functiools.partial은 첫 번째 인자로 받은 함수의 인자들을 나머지 인자들로 바꾼 후 새 함수를 돌려줍니다.
higher-order function을 다룰 때마다 이런 느낌입니다. 인자의 인자의 인자의, 함수의 인자인 함수의 인자인 함수의....
일반적인 경우에 쓸 일이 많지는 않겠지만, 기존 함수를 재활용해서 마치 새 함수인척(?) 할 때 유용합니다.
'Python' 카테고리의 다른 글
bad magic number in 'application': b'\x03\xf3\r\n': ImportError (0) | 2020.05.19 |
---|---|
알쏭달쏭 Python import - sys.path (7) | 2020.05.15 |
함수 이름으로 함수 호출하기 (0) | 2020.05.05 |
Shell 명령의 결과를 받아오고 싶을 때 (0) | 2020.05.01 |
간편한 Progress Bar 모듈 - tqdm (0) | 2020.04.26 |