Python Functools 부분 함수
Functools는 다른 함수에 작용하거나 반환하는 고차 함수로 작업할 때 Python에서 사용되는 표준 프레임워크이며 함수를 다시 작성하지 않고 확장하거나 사용할 수 있도록 도와줍니다. Functools를 사용하면 코드를 읽을 수 있고 고효율로 쉽게 유지 관리할 수 있습니다.
이 라이브러리에는 partial
및 partialmethod
의 두 가지 주요 기능이 포함되어 있습니다. partialmethod
는 특정 인수에 대해 이미 정의된 함수의 호출 불가능한 메서드 설명자이며 새 partialmethod
설명자를 반환합니다.
partial()
함수를 살펴보겠습니다.
Python에서 Functools partial()
함수 사용
partial()
함수는 함수를 입력으로 받아 다른 함수처럼 프로그램에서 사용할 수 있는 함수를 반환하는 고차 함수입니다. 인수가 많은 함수가 있지만 해당 함수를 사용할 때마다 하나 또는 두 개의 인수만 변경해야 하는 경우 Functools 라이브러리와 함께 제공되는 partial()
함수가 이러한 상황을 지원합니다.
partial()
함수의 도움으로 우리는 함수에서 특정 수의 인수를 고정하고 위치 인수 및 키워드가 있는 새 partial()
객체를 반환하는 단순화된 새 인수를 만들 수 있습니다. 따라서 원래 함수를 다시 작성하지 못하게 합니다.
전반적으로 partial()
은 특히 단일 개체에 다양한 입력을 적용하거나 함수의 인수 중 하나를 상수로 래핑할 때 편리한 도구입니다. 따라서 partial()
함수를 사용한 최종 결과는 우아하고 읽기 쉽고 재사용 가능한 코드를 출력합니다.
partial()
함수를 사용하기 전에 Functools 라이브러리에서 가져와야 합니다. 함수를 구현하는 방법을 살펴보겠습니다.
from functools import partial
위의 코드를 사용하여 partial
라이브러리를 가져왔으므로 아래와 같이 partial
명령을 사용할 수 있습니다. 그런 다음 partial()
함수를 원하는 대로 호출할 수 있으며 고정된 값과 함께 정의된 함수와 유사한 함수를 출력합니다.
다음은 표준화된 partial()
함수와 그 속성입니다.
partial(func, /, *args, **keywords)
부분
함수는 함수, 인수 및 키워드의 세 가지 주요 속성으로 구성됩니다.
partial.func
(함수 이름) - 부모 함수의 이름과 16진수 주소를 반환하는 호출 가능한 개체 또는 함수입니다.partial.args
(위치 인수) - 이 속성은partial()
함수에 미리 할당된 인수를 반환합니다.partial.keyword
(키워드 인수) - 이 속성은partial()
함수에 사전 할당된 키워드를 반환합니다.
partial()
함수와 그 속성을 사용하여 예제를 정의해 보겠습니다.
전체 코드:
from functools import partial
# original function
def multiply(a, b):
return a * b
# partial function to multiply a as 2
multiplication1 = partial(multiply, 2)
print(multiplication1(4))
# partial function to multiply b as 7
multiplication2 = partial(multiply, b=7)
print(multiplication2(3))
# simple multiply function with two variables
print(multiply(5, 2))
# partial function with two values and multiply function
multiplication3 = partial(multiply, 2, 5)
print(multiplication3())
# defining some attributes in multiplication1, multiplication2 multiplication3
print("Function used in multiplication1 :", multiplication1.func)
print("Keywords for multiplication2 :", multiplication2.keywords)
print("Arguments for multiplication3 :", multiplication3.args)
출력:
처음에는 functools
에서 partial()
함수를 가져오고 a
및 b
라는 두 개의 변수를 사용하여 multiply()
라는 함수를 정의했습니다. 이 곱하기
기능은 두 개의 숫자 (a,b)
를 함께 곱합니다.
from functools import partial
def multiply(a, b):
return a * b
아래 코드 청크에서 partial()
함수가 호출되고 2
라는 고정 값과 함께 multiply()
함수 개체가 출력됩니다. 여기서 partial()
함수는 a
를 2
로 사용하여 multiply()
를 호출합니다.
인쇄 시 b
에 4
를 할당하고 결과를 8
로 인쇄합니다.
multiplication1 = partial(multiply, 2)
print(multiplication1(4))
여기서 partial()
함수가 호출되면 multiply()
함수와 b
에 할당된 값을 3.
으로 출력합니다. 원래 함수의 매개변수를 건너뛰어 변수 b
의 값을 지정했습니다.
인쇄할 때 a
의 값을 3
으로 정의하고 출력을 21
로 표시합니다.
multiplication2 = partial(multiply, b=7)
print(multiplication2(3))
두 변수의 값으로 함수를 호출할 때 partial()
함수는 필수가 아닙니다. 평소와 같이 a
에는 5
, b
에는 2
를 사용하고 결과를 10
으로 출력합니다.
print(multiply(5, 2))
원래 함수는 partial()
함수를 호출할 때 두 개의 매개 변수가 있으므로 문제가 되지 않으며 multiply()
는 a
를 2
로, b
를 5
로 사용합니다. 그런 다음 결과를 10
으로 표시합니다.
multiplication3 = partial(multiply, 2, 5)
print(multiplication3())
아래 코드 청크는 multiplication1
함수에 사용되는 함수, multiplication2
의 키워드 및 multiplication3
의 인수를 각각 표시합니다. 따라서 multiplication1
에서 사용되는 함수는 multiply()
이고 그 16진수 값은 000001E523A6E4C0
입니다.
multiplication2
에서는 {'b': 7}
을 키워드로 사용했으며 2, 5
는 multiplication3
에서 사용되는 인수입니다.
print("Function used in multiplication1 :", multiplication1.func)
print("Keywords for multiplication2 :", multiplication2.keywords)
print("Arguments for multiplication3 :", multiplication3.args)
결론
이 기사에서는 functools
라이브러리의 partial()
기능에 대해 설명했습니다. 이전 예제에서 보았듯이 partial()
함수를 사용하면 코드를 더 읽기 쉽고 우아하며 빠르게 만들 수 있습니다.
하나 이상의 인수를 고정하는 함수를 찾으면 partial()
함수가 해당 상황에 가장 적합합니다.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.