recherche
Maisondéveloppement back-endTutoriel PythonComment utilisez-vous le module Functools dans Python?

Comment utilisez-vous le module Functools dans Python?

Le module functools dans Python est utilisé pour améliorer la fonctionnalité des fonctions et d'autres objets appelés sans modifier leur code source. Il fournit diverses fonctions d'ordre supérieur qui fonctionnent ou renvoient d'autres fonctions. Voici comment vous pouvez utiliser certains des outils les plus courants du module functools :

  1. Décorateurs : functools propose des décorateurs comme wraps , qui est couramment utilisé pour préserver les métadonnées (comme le nom et le docstring) de la fonction originale lors de la création d'un décorateur.

     <code class="python">from functools import wraps def my_decorator(func): @wraps(func) def wrapper(*args, **kwargs): print("Something is happening before the function is called.") func(*args, **kwargs) print("Something is happening after the function is called.") return wrapper @my_decorator def say_hello(): """Say hello function""" print("Hello!") say_hello()</code>
  2. partial : cette fonction est utilisée pour créer une nouvelle version d'une fonction avec certains arguments pré-remplis.

     <code class="python">from functools import partial def multiply(x, y): return x * y # Create a new function that multiplies by 2 doubled = partial(multiply, 2) print(doubled(4)) # Output: 8</code>
  3. reduce : Cette fonction applique une fonction de deux arguments cumulativement aux éléments d'une séquence, de gauche à droite, afin de réduire la séquence à une seule valeur.

     <code class="python">from functools import reduce numbers = [1, 2, 3, 4] result = reduce(lambda x, y: xy, numbers) print(result) # Output: 10</code>
  4. lru_cache : Il s'agit d'un décorateur qui ajoute des capacités de mémoire (de mise en cache) à une fonction, qui peut être utile pour accélérer des fonctions ou des fonctions récursives avec des calculs coûteux.

     <code class="python">from functools import lru_cache @lru_cache(maxsize=None) def fibonacci(n): if n </code>

Quels sont les exemples pratiques d'utiliser des décorateurs de Functools à Python?

Les décorateurs de Functools offrent un moyen puissant d'améliorer le comportement des fonctions dans Python. Voici quelques exemples pratiques:

  1. Résultats de mise en cache : à l'aide de @lru_cache pour mémoriser les résultats de la fonction pour les appels ultérieurs plus rapides.

     <code class="python">from functools import lru_cache @lru_cache(maxsize=None) def expensive_function(n): # Simulate an expensive computation return n ** n print(expensive_function(10)) # First call is slow print(expensive_function(10)) # Second call is fast due to caching</code>
  2. Préserver les métadonnées de la fonction : utiliser @wraps pour préserver les noms de fonction et les docstrings lors de l'écriture de décorateurs.

     <code class="python">from functools import wraps def timer_decorator(func): @wraps(func) def wrapper(*args, **kwargs): import time start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"{func.__name__} took {end_time - start_time} seconds to run.") return result return wrapper @timer_decorator def slow_function(): """A function that simulates a slow operation.""" import time time.sleep(2) return "Done" print(slow_function.__name__) # Output: slow_function print(slow_function.__doc__) # Output: A function that simulates a slow operation.</code>
  3. Appels de la fonction de journalisation : un décorateur pour enregistrer les appels de la fonction et leurs arguments.

     <code class="python">from functools import wraps def log_calls(func): @wraps(func) def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with args: {args}, kwargs: {kwargs}") return func(*args, **kwargs) return wrapper @log_calls def add(a, b): return ab print(add(2, 3)) # Output: Calling add with args: (2, 3), kwargs: {}</code>

Comment functools.lru_cache peut-il améliorer les performances de votre code Python?

functools.lru_cache est un décorateur qui met en œuvre la mémorisation, qui peut améliorer considérablement les performances des fonctions avec des appels répétitifs, en particulier ceux qui ont des calculs récursifs ou coûteux. Voici comment cela fonctionne et ses avantages:

  1. Résultats de la mise en cache : lru_cache stocke les résultats des appels de fonction et renvoie le résultat mis en cache lorsque les mêmes entrées se reproduisent. Cela réduit le nombre d'appels de fonction réels, ce qui peut entraîner des améliorations de vitesse spectaculaires.

     <code class="python">from functools import lru_cache @lru_cache(maxsize=None) def fibonacci(n): if n </code>
  2. Efficacité de la mémoire : le paramètre maxsize vous permet de contrôler la taille du cache. Une valeur None signifie que le cache peut croître sans lié, tandis que la spécification d'un nombre limite la taille du cache, qui peut être utile pour gérer l'utilisation de la mémoire.
  3. Sécurité du thread : lru_cache est en filetage, ce qui le rend adapté à une utilisation dans des applications multi-thread.
  4. Facilité d'utilisation : l'application du décorateur est simple et ne nécessite pas de modification du code source de la fonction.
  5. Analyse des performances : vous pouvez mesurer l'efficacité du cache en comparant le temps d'exécution de la fonction avec et sans le décorateur.

     <code class="python">import time @lru_cache(maxsize=None) def expensive_function(n): time.sleep(1) # Simulate an expensive computation return n ** n start_time = time.time() result = expensive_function(10) end_time = time.time() print(f"First call took {end_time - start_time} seconds") start_time = time.time() result = expensive_function(10) end_time = time.time() print(f"Second call took {end_time - start_time} seconds")</code>

Quels sont les avantages de l'utilisation de Functools.Partial pour la personnalisation des fonctions dans Python?

functools.partial est un outil utile pour créer de nouveaux objets appelés avec certains arguments de la fonction d'origine pré-remplie. Voici les avantages de l'utilisation functools.partial :

  1. Simplifier les appels de fonction : en pré-remplissant certains arguments, vous pouvez créer des versions plus simples de fonctions plus faciles à utiliser dans des contextes spécifiques.

     <code class="python">from functools import partial def multiply(x, y): return x * y # Create a new function that multiplies by 2 doubled = partial(multiply, 2) print(doubled(4)) # Output: 8</code>
  2. Fonctions de personnalisation : vous pouvez créer des versions personnalisées des fonctions sans modifier la fonction d'origine, qui est utile pour la réutilisation du code et la modularité.

     <code class="python">from functools import partial def greet(greeting, name): return f"{greeting}, {name}!" hello_greet = partial(greet, "Hello") print(hello_greet("Alice")) # Output: Hello, Alice!</code>
  3. Amélioration de la lisibilité : en créant des versions spécialisées de fonctions, vous pouvez rendre votre code plus lisible et explicite.

     <code class="python">from functools import partial def power(base, exponent): return base ** exponent square = partial(power, exponent=2) cube = partial(power, exponent=3) print(square(3)) # Output: 9 print(cube(3)) # Output: 27</code>
  4. Faciliter les tests : partial peut être utilisé pour créer des versions spécifiques aux tests des fonctions, ce qui facilite l'écriture et la maintenance des tests unitaires.

     <code class="python">from functools import partial def divide(a, b): return a / b # Create a test-specific version of divide divide_by_two = partial(divide, b=2) # Use in a test case assert divide_by_two(10) == 5</code>
  5. Intégration avec d'autres outils : partial peut être combiné avec d'autres outils functools , tels que lru_cache , pour créer des personnalisations de fonctions puissantes et efficaces.

     <code class="python">from functools import partial, lru_cache @lru_cache(maxsize=None) def power(base, exponent): return base ** exponent square = partial(power, exponent=2) cube = partial(power, exponent=3) print(square(3)) # Output: 9 print(cube(3)) # Output: 27</code>

En tirant parti functools.partial , vous pouvez améliorer la flexibilité et la maintenabilité de votre code Python, ce qui facilite l'adaptation des fonctions à différents cas d'utilisation sans modifier leurs définitions d'origine.

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
Merger des listes dans Python: Choisir la bonne méthodeMerger des listes dans Python: Choisir la bonne méthodeMay 14, 2025 am 12:11 AM

TomegelistSinpython, vous pouvez faire l'opérateur, ExtendMethod, ListComprehension, oriteroTools.chain, chacun avec des avantages spécifiques: 1) l'opératorissimplebutlessoficiesivetforlatelists; 2) ExtendisMemory-EfficientButmodifiestheoriginallist; 3)

Comment concaténer deux listes dans Python 3?Comment concaténer deux listes dans Python 3?May 14, 2025 am 12:09 AM

Dans Python 3, deux listes peuvent être connectées via une variété de méthodes: 1) Utiliser l'opérateur, qui convient aux petites listes, mais est inefficace pour les grandes listes; 2) Utiliser la méthode Extende, qui convient aux grandes listes, avec une efficacité de mémoire élevée, mais modifiera la liste d'origine; 3) Utiliser * l'opérateur, qui convient à la fusion de plusieurs listes, sans modifier la liste originale; 4) Utilisez Itertools.chain, qui convient aux grands ensembles de données, avec une efficacité de mémoire élevée.

Chaînes de liste de concaténate pythonChaînes de liste de concaténate pythonMay 14, 2025 am 12:08 AM

L'utilisation de la méthode join () est le moyen le plus efficace de connecter les chaînes à partir des listes de Python. 1) Utilisez la méthode join () pour être efficace et facile à lire. 2) Le cycle utilise les opérateurs de manière inefficace pour les grandes listes. 3) La combinaison de la compréhension de la liste et de la jointure () convient aux scénarios qui nécessitent une conversion. 4) La méthode Reduce () convient à d'autres types de réductions, mais est inefficace pour la concaténation des cordes. La phrase complète se termine.

Exécution de Python, qu'est-ce que c'est?Exécution de Python, qu'est-ce que c'est?May 14, 2025 am 12:06 AM

PythonexecutionistheprocessoftransformingpythoncodeintoexecuableInstructions.1) the IntrepreterredSthecode, convertingitintoStecode, quithepythonvirtualmachine (pvm)

Python: quelles sont les principales caractéristiquesPython: quelles sont les principales caractéristiquesMay 14, 2025 am 12:02 AM

Les caractéristiques clés de Python incluent: 1. La syntaxe est concise et facile à comprendre, adaptée aux débutants; 2. Système de type dynamique, améliorant la vitesse de développement; 3. Rich Standard Library, prenant en charge plusieurs tâches; 4. Community et écosystème solide, fournissant un soutien approfondi; 5. Interprétation, adaptée aux scripts et au prototypage rapide; 6. Support multi-paradigme, adapté à divers styles de programmation.

Python: compilateur ou interprète?Python: compilateur ou interprète?May 13, 2025 am 12:10 AM

Python est une langue interprétée, mais elle comprend également le processus de compilation. 1) Le code Python est d'abord compilé en bytecode. 2) ByteCode est interprété et exécuté par Python Virtual Machine. 3) Ce mécanisme hybride rend Python à la fois flexible et efficace, mais pas aussi rapide qu'une langue entièrement compilée.

Python pour Loop vs While Loop: Quand utiliser lequel?Python pour Loop vs While Loop: Quand utiliser lequel?May 13, 2025 am 12:07 AM

Usaforloopwheniterating aepasquenceorfor pourpascific inumberoftimes; useawhileloopwencontinTutuntutilaconditioniseMet.ForloopsareIdealForkNown séquences, tandis que celle-ci, ce qui est en train de réaliser des étages.

Python Loops: les erreurs les plus courantesPython Loops: les erreurs les plus courantesMay 13, 2025 am 12:07 AM

PythonloopscanleadtoerrorlikeInfiniteLoops, modificationlistDuringiteration, off-by-by-oneerrors, zéro-indexingisss et intestloopinefficisecy.toavoid this: 1) use'i

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)