Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

Répondre

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
sept plus seize
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Retour

Résumé de la discussion (messages les plus récents en premier)

yoshi
07-09-2023 15:14:06

Bonjour,

@Glozi : clap ! clap !
Il y a quelques années, j'avais converti ma version informatisée du jeu du Morpion Solitaire du Basic Locomotive (de l'AMSTRAD CPC 6128) en Python, version avec Bonus : lorsque, spontanément, 5 croix sont alignées on a économisé une croix et on est crédité d'un bonus d'une croix. On peur alors poser deux croix d'affilée, la 2e étant prélevé dans le bons.
J'avais prévu des fichiers de sauvegardes qui devaient garder l'emplacement des croix déjà posées, des traits déjà tracés, du score, du bonus sous forme de fichiers, mais de façon bien plus rustique, voire "naïve....
C'était donc un "décorateur" ? Jusqu'à présent tous les décorateurs que j'ai pu voir se trouvaient à l'intérieur d'une classe (je ne maîtrise pas la notion) et ajoutaient un même code de "dépassement de fonction" à une fonction existante (ou plusieurs)...
Après être allé voir ici, je doute d'avoir utilisé un décorateur ? J'aurais décoré quoi ? La fonction open() ?
Peu importe en fait,  ça me rendait le service attendu et dans le cas présent aussi...
J'avais vu ce post hier, et ayant une idée fausse de la notion de décorateur, je m'étais abstenu de répondre ne voulant pas écrire d'ânerie(s).

N-B : Oui, les mots anglais de base sont tous enregistrés dans un fichier, et un anti-spam maison (ce n'est pas moi qui l'ait écrit) scanne,  à leur recherche, dans les textes proposés, d'où le message refusant l'enregistrement pour cause de spam (et trouver le mot mot incriminé prend du temps...) : cela date de l'époque où nous avions été submergés par des messages en anglais proposant, vantant des médicaments probablement bidons...
Depuis, on a la paix...

@+

Glozi
07-09-2023 13:26:25

Bonjour,
Ça faisait longtemps que je n'avais pas vu un décorateur, rien de tel pour se remettre dedans !
Une solution, par exemple en enregistrant les appels dans un fichier.


w ith open("calls.log", "a") as file:
     arguments=str()
     for arg in args:
           arguments += str(arg)+", "
     for key in kwargs:
           arguments += str(key)+"="+str(kwargs[key])+", "
     file.write("function : '"+func.__name__+"', arguments : "+arguments+"result : " + str(result)+ "\n")
 

(code à rajouter à l'endroit où tu as mis #log the result)

Ce code naïf demande que __str__ soit implémenté pour chaque objet passé en arguments ainsi que chaque objet renvoyé en sorti.
Je ne sais pas si c'est ce que tu veux,
NB : je n'ai pas pu écrire le mot clef "w ith" sinon le site dit que je spam.
Bonne journée

BillyJC
07-09-2023 11:58:16

Je travaille sur un projet Python dans lequel j'ai plusieurs fonctions et je souhaite enregistrer chaque appel de fonction avec ses arguments et sa valeur de retour à des fins de débogage. J'ai entendu dire que les décorateurs peuvent aider à y parvenir. Quelqu'un pourrait-il me guider sur la façon de créer un décorateur personnalisé pour enregistrer les appels de fonction ?

Voici ce que j'ai en tête :

def log_function_call(func):
    def wrapper(*args, **kwargs):
        # Log function call, arguments, and return value
        result = func(*args, **kwargs)
        # Log the result
        return result
    return wrapper

@log_function_call
def add(a, b):
    return a + b

@log_function_call
def subtract(a, b):
    return a - b

# Example function calls
result1 = add(5, 3)
result2 = subtract(10, 4)
 

J'aimerais enregistrer les appels de fonction et leurs résultats de manière propre et organisée. Comment puis-je modifier le décorateur log_function_call pour y parvenir ? De plus, quelle est la meilleure pratique pour configurer l'enregistreur en Python afin de capturer ces journaux efficacement ? Tous les exemples de code ou recommandations seraient grandement appréciés. Merci!

Pied de page des forums