Resumo : Neste tutorial, você aprenderá sobre 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
Linguagem de código: Python ( python )
Às vezes, você deseja apenas multiplicar um argumento por um número especificado, por exemplo, 2. Para fazer isso, você pode reutilizar a multiply
função assim:
def double(a):
return multiply(a,2)
Linguagem de código: Python ( python )
A double
função retorna a multiply
função. Passou o número 2 para o segundo argumento da multiply
função.
O seguinte mostra como usar a double
função:
result = double(10)
print(result)
Linguagem de código: Python ( python )
Junte tudo:
def multiply(a, b):
return a*b
def double(a):
return multiply(a, 2)
result = double(10)
print(result) # 20
Linguagem de código: Python ( python )
Como você pode ver, a double
função reduz os argumentos da multiply
função.
A double
função congela o segundo argumento da multiply
função, o que resulta em uma nova função com uma assinatura mais simples.
Em outras palavras, double
a função reduz a complexidade da multiply
função.
Em Python, a double
função é 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 às vezes você criará funções parciais, o Python fornece a partial
função do functools
módulo 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 partial
função do functools
módulo:
functools.partial(fn, /, *args, **kwargs)
Linguagem de código: Python ( python )
A partial
função retorna um novo partial
objeto, que pode ser chamado .
Quando você chama o partial
objeto, o Python chama a fn
função com argumentos posicionais args
e argumentos de palavras-chave kwargs
.
O exemplo a seguir mostra como usar a partial
função para definir a double
função a partir da multiply
função:
from functools import partial
def multiply(a, b):
return a*b
double = partial(multiply, b=2)
result = double(10)
print(result)
Linguagem de código: Python ( python )
Saída:
20
Como funciona.
- Primeiro, importe a
partial
função dofunctools
módulo. - Em segundo lugar, defina a
multiply
função. - Terceiro, retorne um objeto parcial da
partial
função e atribua-o àdouble
variável.
Quando você chama o double
, o Python chama a multiply
função cujo b
argumento é padrão 2
.
Se você passar mais argumentos para um objeto parcial, o Python os anexará ao args
argumento.
Quando você passa argumentos de palavras-chave adicionais para um objeto parcial, o Python estende e substitui os kwargs
argumentos.
Portanto, é possível chamar double
assim:
double(10, b=3)
Linguagem de código: Python ( python )
Neste exemplo, Python chamará a multiply
função onde o valor do b
argumento é 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)
Linguagem de código: Python ( python )
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 Python avalia o valor de x
na seguinte instrução:
f = partial(multiply, x)
Linguagem de código: Python ( python )
…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
partial
a função dofunctools
módulo para criar funções parciais em Python.