Skip to main content

L'article précédent a été inclus dans la nature et en utilisant la décoration plus tard, et a également appris son utilisation de base, suffisamment pour traiter 80% de la scène. Cependant, il y a toujours 20% des scènes pour utiliser des méthodes de base qui ne peuvent pas être résolues. À ce stade, nous avons besoin de plus en plus de moyens d'utiliser.


Exemple: je veux contrôler la fonction de la décoration via un paramètre, ce problème est vraiment populaire. Prenez le temps d'enregistrement, nous savons tous que le temps peut être écrit dans de nombreux formats, tels que ceux-ci pouvant être enregistrés 2020-05-04 ou 20200504, et peut également être enregistré le 04 / 05/2016, s'il enregistre toujours l'horodatage. Par exemple: Nous reconnaissons maintenant une décoration de journaux de journaux, utilisées pour signer des journaux pour nous, nous souhaitons maintenant contrôler le format horaire des journaux enregistrés, cette demande ne résolve pas en utilisant la décoration la plus simple.
Cette fois, si vous voulez résoudreLe problème, vous devez introduire les paramètres, ce qui signifie que nous devons participer aux paramètres de la décoration. Mais le problème est de venir, comment ajouter ce paramètre, où est-ce?

1. Identifiez les paramètres décoratifs

Avant d'introduire une utilisation spécifique, voir le code de la décoration:

def MyDEC (FUNC): @wraps (FUNC) def MyWrap (* args, ** kw): print ('Bonjour c'est décoration1') Func (* args, ** kw) retourne mywrap @mydecdef helloworld (): imprimer ("Bonjour, le monde"
C'est la décoration la plus simple que nous avons dit. Si nous voulons transmettre un type de paramètre à ce stade, nous pouvons contrôler la tête de décoration. Comme ceci:

@mydec (Entrez _ 'Test') def helloworld ( ): Imprimer ('Hello, World')

Nous voudrons peut-être être dans le numéro de la cupidité de la méthode MyDec, ajoutez un type_ si vous l'essayez, vous constaterez que ce sera une erreur: L'erreur de l'erreur est très bonne, mais la raisonest une solution. Cette erreur est de dire une fonction de moins de peu.func, ce func est la fonction que nous avons à packer, mais cela ne vient pas automatiquement, comment pouvons-nous nous rappeler moins que ce paramètre?

Si la nature de ce problème ne peut être comprise, la décoration est difficile à devenir, car seulement comprendre cela, peut comprendre les progrès étrange avancés différemment de l'utilisation de la décoration arrière. Mais très fosses, plus d'informations recommande simplement comment elle est utilisée et explorant rarement les raisons qui l'appuient, cela donnera aux débutants à comprendre. J'ai également passé beaucoup d'esprit quand j'étudiais, j'ai finalement expliqué clairement, disant que c'était très simple, mais ce n'était pas facile. En fait, la principale raison de ce rapport sera décorée de paramètres et aucun paramètre n'est complètement différent.


Considérons d'utiliser des décorations inégalées, telles que:

@mydecdef Hello_world (): PASS


Nous appliquons hello_world (quand il est équivalent à MyDec exécutable (Hello_World). Regardez, nous avons commencé ce code, la réalité Ceci est vraiment des liens le résultat des deux lignes de code suivantes: cur mydec (hello_world) curieux ()

Si Hello_World Cette fonction apporte des paramètres?

@mydecdef Hello_world (* args, ** kw): Pass
Vraiment comme ça:

Cur mydec (Hello_world) curieux (* args, * * kw)

Après cette compréhension, nous continuons maintenant, nous voulons maintenant transmettre un paramètre pour la décoration, selon Nos idées, les deux codes suivants seront les mêmes.

@mydec (Type _ 'Test') Def Helloworld (): Imprimer ('Hello, World') Cur MyDec (Hello_World, Type_) Curieux () [) [)
Mais malheureusement pas conçu dans l'interprète Python. Il a créé une couche d'emballage décoratif plus des paramètres, ce qui signifie que le code suivant avec le code après la fonction Hello_World est exécuté ci-dessus:

CUR1 mydec (type_) cur2 cur2 hello_world) CUR2 ()


C'est parce que davantage a installé une classe, donc l'ordre de la fonction et les paramètres décoratifs sont différents et commandez également différents. Après avoir compris cela, plus simple, car Python Interprète ajoute une couche lors de l'interprétation des paramètres décoratifs, alors si nous voulons déployer les paramètres, seuls des ensembles décoratifs sont également disponibles dans des décorations. Oui. Par exemple: vous pouvez écrire ceci:

def mydec (type_ aucun): DEL Décoration (FUNC): @wraps (FUNC) def MyWrap (): si type_ n'est pas non no: in (type_) Func () Retour MyWrap dos décoré

nous pouvons ré-inscris:
Lundi, le paramètre par défaut est il semble que tout soit parfait, mais il y a un gros problème ignoré par nous. Ce problème est le problème de paramètre par défaut. Lorsque nous définissons la décoration, placez ce paramètre type_ à l'option. Cela convient également aux situations réellesA US, si nécessaire, les paramètres peuvent être ignorés. Mais cela a conduit à un problème et certaines personnes n'ont pas à rédiger une reconnaissance avec MyDEC () et certaines personnes utilisées pour écrire MyDEC. Si nous allons essayer mon décembre, nous constaterons que cela sera rapporté:

Cette erreur est identique à celle ci-dessus, la cause de l'apparence aime aussi, c'est moins de func. paramètres. Mais très étrange, pourquoi avez-vous du fonctionnement?

La raison est simple, car nous retirons les supports, la décoration revient à la structure de deux couches précédente!

Cur mydec (hello_world) cur (* args, ** kw)

Il s'agit de beaucoup de nids de poule, notre structure décorative n'est pas modifiée si vous utilisez la structure à deux couches a Aucun moyen de transmettre les paramètres, mais si vous ne transférez pas les paramètres, attachez-vous uniquement le style uniforme du programmateur et des parenthèses? C'est bien sûr une façon, y a-t-il une meilleure façon? Quelle voie au systèmela plupart de ces deux logiques?


Bien sûr, pour résoudre ce problème, nous devons utiliser un nouvel outil appelé Fonction de biais. La fonction partielle est facile à comprendre, les cônes sont également une fonction élevée, vraiment une fermeture. L'utilisation d'une fonction partielle est destinée à plusieurs fonctions de paramètres et les valeurs de transmission de certains paramètres peuvent être fixées à l'aide de la fonction partielle, donc agissant comme une fonctionnalisation simple de fonction. Prenons un exemple, nous créons une fonction POW pour calculer N Times of X:

Entrer MathDEF POW (X, N): Retour à Math.Pow (x, N)

Cette capacité doit transférer le X et N Paramètres, si nous avons actuellement besoin de calculer le carré, nous pouvons utiliser le package, modifier n paramètres, créer une nouvelle fonction pour le faire. Par exemple:

Def Myppow (N): Def Func (x): Retourne Pow (X, N) renvoie Func


Essence est un sac fermé donc, mais Il simplifie notre code:

de FuncTools Entrée partiellePow2 PARTIE (POW, N 2) POW2 (6)


À l'aide de la fonction de biais, il n'est nécessaire que de transmettre la fonction d'origine et la valeur de paramètre fixe est requise. Nous utilisons la fonction partielle pour résoudre le problème maintenant dans la décoration. Le rappel, la décoration sans paramètres est la fonction à deux couches imbriquée et la courroie est de trois couches imbriquées. Après cela, nous utilisons une partie, notamment en ajoutant une couche de cage supplémentaire:

def mydec (Func Aucun Oty_ Aucune): # Aucun paramètre, FUNC n'aura pas, alors nous avons modifié les paramètres que les paramètres peuvent être modifiés si le FUNC n'est pas : pièce de rebond (mydec, type_ type_) @ @wraps (func) def mywrap (): si type_ n'est pas: in (type_) FUNC () Retourne MyWrap

Voyons ce détail, lorsque nous ne transmettons pas les paramètres, Nous exécutons en fait Cur MyDEC (FUNC). À ce stade, Func n'est pas vide, puis prétend que si cela n'est pas activé, il va donc tourner directement dans MOWRAP. Si vous passez les paramètres, cette heure Func est KHIl a activé une partie du si. Notez que les fonctions que nous avons une partie sont toujours myd. C'est, nous corrige cette erreur de paramètre. Si l'appel est toujours retourné, MyWrap est équivalent à l'ajout d'une couche avec l'ajout de paramètres par une partie de la structure à deux couches, la logique consolidée.
Mardi, finissant
Le concept d'aujourd'hui est plus compliqué que la décoration précédente, cela peut ne pas la comprendre, en fait, c'est très normal. Ce n'est pas seulement le problème de la décoration, mais aussi le problème de Python, qui correspond aux caractéristiques de la programmation fonctionnelle. L'avantage de la programmation fonctionnelle est très flexible, très pratique à utiliser, mais les inconvénients sont également clairs, le code est difficile à maintenir, la lecture est difficile à lire et ce n'est pas simple. Les débutants typiques sont simples et profonds et très difficiles à être typiques. Donc, si vous sentez que vous ne pouvez pas comprendre cela, ce n'est pas votre question. D'une part, nous devons cultiver leurs propres fonctions de programmation, d'autre part, nous cIl doit également se familiariser avec l'utilisation de décorations en python.

Enfin, je pensais, car seuls les loups et les royaumes, ont récemment atteint des jeux difficiles. Quand j'ai commencé à jouer, je me sentais très difficile, souvent des calories, un patron est mort des dizaines d'heures à la maison. Je suis venu plus tard, j'ai lentement trouvé l'astuce, j'ai trouvé que ce genre de jeu et même tous les jeux sont simples.


Ce n'est pas seulement moi familier, mais aussi plus parce que j'ai commencé à penser à jouer à des jeux, commencez à penser à ces conceptions de patron? Que devez-vous traiter avec nous? Quelles sont les règles de droit? Pensez plus, avez aussi un pourboire. Une fois que vous en avez plus, de nombreux chefs n'ont la première fois que deux ou trois collections familières, vous pouvez le transmettre. Peu à peu, j'ai trouvé beaucoup de choses dans la vie. Comme le patron dans le jeu, je viens de le voir. Quand je l'ai vu, j'ai senti que je ne comprenais pas ça, jeSe sentir déroutant, j'ai senti que c'était une grande chose, donc c'était difficile.Mais tant qu'il y a un cœur courageux, courageux, apprenez à faire froid et vivre, mais c'est juste un tigre en papier.

J'espère vous donner un peu d'inspiration.J'espère que les difficultés devant les gens ne sont que des tigres en papier.J'espère que tout le monde peut trouver leur courage.


Sujets