Resumo: Neste tutorial, você aprenderá sobre as funções parciais do Python e como definir funções parciais usando a função parcial do módulo functools.
Introdução às funções parciais do Python
O exemplo a seguir define uma função que multiplica dois argumentos:
def multiply(a, b):
return a*b
Às vezes, você só quer multiplicar um argumento com um número especificado, por exemplo, 2. Para fazer isso, você pode reutilizar a função multiply
como esta:
def double(a):
return multiply(a,2)
A função double
retorna a função multiply
. Ele passou o número 2 para o segundo argumento da função multiply
.
O seguinte mostra como usar a função double
:
result = double(10)
print(result)
Junte tudo:
def multiply(a, b):
return a*b
def double(a):
return multiply(a, 2)
result = double(10)
print(result) # 20
Como você pode ver, a função double
reduz os argumentos da função multiply
.
A função double
congela o segundo argumento da função multiply
, o que resulta em uma nova função com uma assinatura mais simples.
Em outras palavras, a função double
reduz a complexidade da função multiply
.
Em Python, a função double
é chamada de função parcial.
Na prática, você usa funções parciais quando deseja reduzir o número de argumentos de uma função para simplificar a assinatura da função.
Como você criará funções parciais às vezes, o Python fornece a função partial
do módulo functools
padrão para ajudá-lo a definir funções parciais com mais facilidade.
Função parcial Python do módulo functools
O seguinte mostra a sintaxe da função partial
do módulo functools
:
functools.partial(fn, /, *args, **kwargs)
A função partial
retorna um novo objeto partial
, que é um callable.
Quando você chama o objeto partial
, o Python chama a função fn
com os argumentos posicionais args
e os argumentos de palavra-chave kwargs
.
O exemplo a seguir mostra como usar a função partial
para definir a função double
a partir da função multiply
:
from functools import partial
def multiply(a, b):
return a*b
double = partial(multiply, b=2)
result = double(10)
print(result)
Saída:
20
Como funciona.
- Primeiro, importe a função
partial
do módulofunctools
. - Segundo, defina a função
multiply
. - Terceiro, retorne um objeto parcial da função
partial
e atribua-o à variáveldouble
.
Quando você chama o double
, o Python chama a função multiply
em que o valor padrão de b
é 2
.
Se você passar mais argumentos para um objeto parcial, o Python os anexará ao argumento args
.
Quando você passa argumentos de palavra-chave adicionais para um objeto parcial, o Python estende e substitui os argumentos kwargs
.
Portanto, é possível chamar double
assim:
double(10, b=3)
Neste exemplo, o Python chamará a função multiply
em que o valor do argumento b
é 3, não 2.
E você verá a seguinte saída:
30
Funções e variáveis parciais do Python
Às vezes, você pode querer usar variáveis para criar parciais. Por exemplo:
from functools import partial
def multiply(a, b):
return a*b
x = 2
f = partial(multiply, x)
result = f(10) # 20
print(result)
x = 3
result = f(10) # 20
print(result)
Neste exemplo, mudamos x
para 3
e esperamos que f(10)
retorne 30
em vez de 20.
No entanto, f(10)
retorna 20
em vez disso. É porque o Python avalia o valor de x
na seguinte instrução:
f = partial(multiply, x)
…mas não depois disso, portanto, quando x
se faz referência ao novo número (3
), a função parcial não muda.
Resumo
- Use a função
partial
do módulofunctools
para criar funções parciais em Python.