Je dois écrire un décorateur Voici un exemple: p> def code> qui prend un
validator def code> comme argument. Si le validateur
code> renvoyé
true code> il doit décorer
principal code> pour exécuter du code et s'il est renvoyé
false code> il devrait imprimer un erreur Juger (la validation doit être effectuée en dehors du décorateur) p>
4 Réponses :
Les décorateurs peuvent être écrits comme exemple
def limit_decorator(func): def internal(arg): if (arg >= 0): return func(arg) else: raise Exception("false input") return internal @limit_decorator def square_root(a): return a * 0.5 a = -5 print("Sum =", square_root(a))
Le problème est que le code que j'ai envoyé va être juge en ligne afin que je ne puisse pas réécrire le code. Le décorateur doit être defiine exactement comme je l'ai dit
Je suggérerais de faire la validation de X, en utilisant une couche sur des fonctions imbriquées (fondamentalement fusionner la fonction de validateur dans le décorateur)
Merci de votre réponse, mais la fonctionnalité du code doit être comme si j'ai dit, car il va être jugé en ligne
Essayez ceci:
def decorator(validator): def subdecorator(function): def actual_function(arg): if not validator(arg): raise ValueError(f"Bad data: {arg}") return function(arg) return actual_function return subdecorator
Voici ce que vous pouvez faire
#define decorator... def validator(x): return x>=0 def deco(validator): def decorator(func): def wrapper_decorator(*args, **kwargs): if validator(*args, **kwargs): return func(*args, **kwargs) else: print("error") return return wrapper_decorator return decorator @deco(validator) def f(x): return x**0.5 print(f(4)) #should print 2 print(f(-4)) #should print error
"J'ai essayé d'écrire deux def dans la décoratrice avec une déclaration IF pour renvoyer deux défensements différents, mais cela ne fonctionne pas" - Veuillez inclure votre tentative dans le poste.
La fonctionnalité et la logique doivent ressembler exactement comme je l'ai dit (en raison d'un jugement en ligne)