Maison >développement back-end >Tutoriel Python >Qu'est-ce que « functools.partial » en Python ?

Qu'est-ce que « functools.partial » en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-02 02:37:11560parcourir

What is `functools.partial` in Python?

Lisez cet article complet sur Global News One

Qu'est-ce que functools.partial ?

functools.partial crée une nouvelle fonction en appliquant partiellement des arguments à une fonction existante. Ceci est utile pour simplifier les appels de fonction dans les scénarios où certains arguments sont répétitifs ou fixes.

La fonction functools.partial en Python vous permet de "geler" une partie des arguments ou des mots-clés d'une fonction, créant ainsi une nouvelle fonction avec moins de paramètres. C'est particulièrement utile lorsque vous souhaitez fixer certains paramètres d'une fonction tout en gardant d'autres flexibles.

from functools import partial

Syntaxe de base

partial(func, *args, **kwargs)
  • func : La fonction à appliquer partiellement.
  • *args : Arguments positionnels à corriger.
  • `kwargs`** : Arguments de mots clés à corriger.

L'objet renvoyé est une nouvelle fonction où les arguments fixes sont "gelés" et vous n'avez qu'à fournir les arguments restants lors de l'appel de la nouvelle fonction.


Exemples

1. Correction partielle des arguments

def power(base, exponent):
    return base ** exponent

# Create a square function by fixing exponent = 2
square = partial(power, exponent=2)

# Now, square() only needs the base
print(square(5))  # Output: 25
print(square(10))  # Output: 100

Ici, partial crée un nouveau carré de fonction qui utilise toujours exposant=2.


2. Simplifier les appels de fonction

Supposons que vous ayez une fonction avec plusieurs arguments et que vous l'appeliez souvent avec des valeurs fixes.

def greet(greeting, name):
    return f"{greeting}, {name}!"

# Fix the greeting
say_hello = partial(greet, greeting="Hello")
say_goodbye = partial(greet, greeting="Goodbye")

print(say_hello("Alice"))   # Output: Hello, Alice!
print(say_goodbye("Alice")) # Output: Goodbye, Alice!

3. Partiel à utiliser dans la cartographie

Vous pouvez utiliser partial pour adapter une fonction à des opérations telles que map.

def multiply(x, y):
    return x * y

# Fix y = 10
multiply_by_10 = partial(multiply, y=10)

# Use in a map
numbers = [1, 2, 3, 4]
result = map(multiply_by_10, numbers)
print(list(result))  # Output: [10, 20, 30, 40]

4. Partiel avec des fonctions qui ont des arguments par défaut

Partial fonctionne de manière transparente avec les fonctions qui ont déjà des arguments par défaut.

def add(a, b=10):
    return a + b

# Fix b to 20
add_with_20 = partial(add, b=20)
print(add_with_20(5))  # Output: 25

5. Combinaison avec d'autres bibliothèques (par exemple, Pandas ou JSON)

Vous pouvez utiliser partial avec des bibliothèques comme Pandas pour simplifier les opérations répétitives.

from functools import partial

Quand utiliser functools.partial

  1. Logique réutilisable :
    • Lorsque vous souhaitez créer des versions réutilisables d'une fonction avec des arguments fixes.
  2. Simplifier les rappels :
    • Utile pour les bibliothèques comme tkinter, asyncio ou threading, où les rappels nécessitent souvent des signatures plus simples.
  3. Programmation Fonctionnelle :
    • Fonctionne bien avec une carte, un filtre ou des opérations similaires.
  4. Amélioration de la lisibilité :
    • Rend le code plus propre en réduisant les arguments redondants.

Remarques et bonnes pratiques

  • Inspection des fonctions partielles : Vous pouvez inspecter les arguments gelés d'une fonction partielle à l'aide de partial.func, partial.args et partial.keywords.
partial(func, *args, **kwargs)
  • Flexibilité : Vous pouvez remplacer les arguments gelés lors de l'appel de la fonction partielle.
def power(base, exponent):
    return base ** exponent

# Create a square function by fixing exponent = 2
square = partial(power, exponent=2)

# Now, square() only needs the base
print(square(5))  # Output: 25
print(square(10))  # Output: 100

Exemple avancé : utilisation de Partial pour les fonctions d'ordre supérieur

def greet(greeting, name):
    return f"{greeting}, {name}!"

# Fix the greeting
say_hello = partial(greet, greeting="Hello")
say_goodbye = partial(greet, greeting="Goodbye")

print(say_hello("Alice"))   # Output: Hello, Alice!
print(say_goodbye("Alice")) # Output: Goodbye, Alice!

L'utilisation de functools.partial peut simplifier et nettoyer votre code, en particulier lorsqu'il s'agit d'appels de fonction répétitifs ou de fonctions d'ordre supérieur. Faites-moi savoir si vous souhaitez plus d'exemples ou de cas d'utilisation avancés !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn