Funções Parciais do Python

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ódulo functools.
  • Segundo, defina a função multiply.
  • Terceiro, retorne um objeto parcial da função partial e atribua-o à variável double.

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ódulo functools para criar funções parciais em Python.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *