Funções parciais do Python

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*bLinguagem 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 multiplyfunção assim:

def double(a):
    return multiply(a,2)Linguagem de código:  Python  ( python )

A doublefunção retorna a multiplyfunção. Passou o número 2 para o segundo argumento da multiplyfunção.

O seguinte mostra como usar a doublefunçã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)  # 20Linguagem de código:  Python  ( python )

Como você pode ver, a doublefunção reduz os argumentos da multiplyfunção.

A doublefunção congela o segundo argumento da multiplyfunção, o que resulta em uma nova função com uma assinatura mais simples.

Em outras palavras, doublea função reduz a complexidade da multiplyfunção.

Em Python, a doublefunçã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 partialfunção do functoolsmó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 partialfunção do functoolsmódulo:

functools.partial(fn, /, *args, **kwargs)Linguagem de código:  Python  ( python )

A partialfunção retorna um novo partialobjeto, que pode ser chamado .

Quando você chama o partialobjeto, o Python chama a fnfunção com argumentos posicionais argse argumentos de palavras-chave kwargs .

O exemplo a seguir mostra como usar a partialfunção para definir a doublefunção a partir da multiplyfunçã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 partialfunção do functoolsmódulo.
  • Em segundo lugar, defina a multiplyfunção.
  • Terceiro, retorne um objeto parcial da partialfunção e atribua-o à doublevariável.

Quando você chama o double, o Python chama a multiplyfunção cujo bargumento é padrão 2.

Se você passar mais argumentos para um objeto parcial, o Python os anexará ao argsargumento.

Quando você passa argumentos de palavras-chave adicionais para um objeto parcial, o Python estende e substitui os kwargsargumentos.

Portanto, é possível chamar doubleassim:

double(10, b=3)Linguagem de código:  Python  ( python )

Neste exemplo, Python chamará a multiplyfunção onde o valor do bargumento é 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 xpara 3e esperamos que f(10)retorne 30em vez de 20.

No entanto, f(10)retorna 20em vez disso. É porque Python avalia o valor de xna 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 partiala função do functoolsmódulo 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 *