


Une explication détaillée des gestionnaires de contexte Python et des blocs
Cet article présente principalement les informations pertinentes du gestionnaire de contexte Python et avec le bloc en détail. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer au
Context Manager et avec le bloc, le contenu spécifique est. comme suit
L'objet gestionnaire de contexte existe pour gérer l'instruction with, tout comme l'itérateur existe pour gérer l'instruction for. Le but de l'instruction
with est de simplifier le modèle try/finally. Ce mode est utilisé pour garantir qu'une certaine opération est effectuée après la fin de l'exécution d'un morceau de code. Même si le code est terminé en raison d'une exception, d'une instruction return ou d'un appel sys.exit(), l'opération spécifiée sera. effectué. Le code de la clause finale est généralement utilisé pour libérer des ressources importantes ou restaurer un état temporairement modifié.
==Le protocole du gestionnaire de contexte contient deux méthodes, enter et exit==. Lorsque l'instruction with commence à s'exécuter, la méthode enter est appelée sur l'objet gestionnaire de contexte. Une fois l'exécution de l'instruction with terminée, la méthode exit est appelée sur l'objet gestionnaire de contexte, agissant ainsi comme la clausefinal.
==Le résultat de l'exécution de l'expression après with est l'objet gestionnaire de contexte. La liaison de la valeur à la variable cible (en tant que clause) est le résultat de l'appel de la méthode enter sur l'objet gestionnaire de contexte == . La clause as de l'instruction with est facultative. Pour la fonction open, une clause as doit être ajoutée pour obtenir une référence au fichier. Cependant, certains gestionnaires de contexte renverront None car il n'y a aucun objet utile à fournir à l'utilisateur.
with open('mirror.py') as fp: ...
Classe de contexte personnalisée :
class A: def __init__(self, name): self.name = name def __enter__(self): print('enter') return self.name def __exit__(self, exc_type, exc_val, exc_tb): print('gone') with A('xiaozhe') as dt: print(dt)
module contextlib
Il existe également certaines classes et autres fonctions du module contextlib qui sont plus largement utilisées.
closing : Si l'objet fournit une méthode close() mais n'implémente pas le protocole enter/exit, vous pouvez utiliser cette fonction pour créer un gestionnaire de contexte.
suppress : construisez un gestionnaire de contexte qui ignore temporairement les exceptions spécifiées.
@contextmanager : ==Ce décorateur transforme une simple fonction génératrice en un gestionnaire de contexte==, il n'est donc pas nécessaire de créer une classe pour implémenter le protocole du gestionnaire.
ContextDecorator : il s'agit d'une classe de base utilisée pour définir des gestionnaires de contexte basés sur les classes. Ce gestionnaire de contexte peut également être utilisé pour décorer des fonctions, en exécutant l'intégralité de la fonction dans un contexte géré
ExitStack : Ce gestionnaire de contexte peut entrer dans plusieurs gestionnaires de contexte. À la fin du bloc with, ExitStack appelle les méthodes exit de chaque gestionnaire de contexte de la pile dans l'ordre dernier entré, premier sorti.
== Le plus utilisé est le décorateur @contextmanager, alors prêtez-y une attention particulière. Ce décorateur est également déroutant car il n'a rien à voir avec l'itération, mais utilise l'instruction rendement ==.
Utilisation de @contextmanager
Le décorateur @contextmanager peut réduire la quantité de code standard requis pour créer un gestionnaire de contexte au lieu d'écrire une classe complète définissant les méthodes d'entrée et de sortie. , seulement Vous devez implémenter un générateur avec une instruction rendement pour générer la valeur que vous souhaitez que la méthode enter renvoie.
Dans un générateur décoré avec @contextmanager, la fonction de l'instruction rendement est de diviser le corps de définition de la fonction en deux parties : ==yield Tout le code avant que l'instruction ne commence au début du bloc with (c'est-à-dire que l'interpréteur appelle la méthode enter ), le code qui suit l'instruction rendement s'exécute == à la fin du bloc with (c'est-à-dire lorsque la méthode exit est appelée).
import contextlib @contextlib.contextmanager def test(name): print('start') yield name print('end') with test('zhexiao123') as dt: print(dt) print('doing something')
Principe d'implémentation
le décorateur contextelib.contextmanager enveloppera la fonction dans une classe qui implémente les méthodes d'entrée et de sortie . Le nom de la classe est _GeneratorContextManager.
La méthode enter de cette classe a les fonctions suivantes :
1. Appelez la fonction générateur et enregistrez l'objet générateur (ici il est appelé gen).
2. Appelez next(gen) et exécutez à l'emplacement du mot-clé rendement.
3. Renvoie la valeur produite par next(gen) afin que la valeur produite puisse être liée à la variable cible dans l'instruction with/as.
Lorsque le bloc with se termine, la méthode de sortie fera les choses suivantes :
1 Vérifiez si l'exception a été transmise à exc_type ; si c'est le cas, appelez gen.throw(. exception), une exception est levée sur la ligne contenant le mot-clé rendement dans le corps de définition de la fonction génératrice.
2. Sinon, appelez next(gen) pour continuer à exécuter le code après l'instruction rendement dans le corps de définition de la fonction du générateur.
Gestion des exceptions
Afin d'indiquer à l'interpréteur que l'exception a été gérée, la méthode de sortie retournera True et l'interpréteur supprimera l'exception. Si la méthode exit ne renvoie pas explicitement de valeur, l'interpréteur obtient None et fait apparaître l'exception.
Lors de l'utilisation du décorateur @contextmanager, le comportement par défaut est inverse : la méthode de sortie fournie par le décorateur suppose que toutes les exceptions envoyées au générateur ont été gérées, et donc les exceptions doivent être supprimées. Si vous ne souhaitez pas que @contextmanager supprime les exceptions, vous devez explicitement renvoyer l'exception dans la fonction décorée.
Il y a un bug dans le code ci-dessus : si une exception est levée dans le bloc with, l'interpréteur Python l'attrapera puis la relancera dans l'expression rendement de la fonction de test. Cependant, il n’existe aucun code pour gérer l’erreur, donc la fonction de test est abandonnée.
使用 @contextmanager 装饰器时,要把 yield 语句放在 try/finally 语句中,因为我们永远不知道上下文管理器的用户会在 with 块中做什么。
import contextlib @contextlib.contextmanager def test(name): print('start') try: yield name except: raise ValueError('error') finally: print('end') with test('zhexiao123') as dt: print(dt) print('doing something')
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Les problèmes de «chargement» PS sont causés par des problèmes d'accès aux ressources ou de traitement: la vitesse de lecture du disque dur est lente ou mauvaise: utilisez Crystaldiskinfo pour vérifier la santé du disque dur et remplacer le disque dur problématique. Mémoire insuffisante: améliorez la mémoire pour répondre aux besoins de PS pour les images à haute résolution et le traitement complexe de couche. Les pilotes de la carte graphique sont obsolètes ou corrompues: mettez à jour les pilotes pour optimiser la communication entre le PS et la carte graphique. Les chemins de fichier sont trop longs ou les noms de fichiers ont des caractères spéciaux: utilisez des chemins courts et évitez les caractères spéciaux. Problème du PS: réinstaller ou réparer le programme d'installation PS.

Le bégaiement "Chargement" se produit lors de l'ouverture d'un fichier sur PS. Les raisons peuvent inclure: un fichier trop grand ou corrompu, une mémoire insuffisante, une vitesse du disque dur lente, des problèmes de pilote de carte graphique, des conflits de version PS ou du plug-in. Les solutions sont: vérifier la taille et l'intégrité du fichier, augmenter la mémoire, mettre à niveau le disque dur, mettre à jour le pilote de carte graphique, désinstaller ou désactiver les plug-ins suspects et réinstaller PS. Ce problème peut être résolu efficacement en vérifiant progressivement et en faisant bon usage des paramètres de performances PS et en développant de bonnes habitudes de gestion des fichiers.

Un PS est coincé sur le "chargement" lors du démarrage peut être causé par diverses raisons: désactiver les plugins corrompus ou conflictuels. Supprimer ou renommer un fichier de configuration corrompu. Fermez des programmes inutiles ou améliorez la mémoire pour éviter une mémoire insuffisante. Passez à un entraînement à semi-conducteurs pour accélérer la lecture du disque dur. Réinstaller PS pour réparer les fichiers système corrompus ou les problèmes de package d'installation. Afficher les informations d'erreur pendant le processus de démarrage de l'analyse du journal d'erreur.

L'article présente le fonctionnement de la base de données MySQL. Tout d'abord, vous devez installer un client MySQL, tel que MySQLWorkBench ou le client de ligne de commande. 1. Utilisez la commande MySQL-UROot-P pour vous connecter au serveur et connecter avec le mot de passe du compte racine; 2. Utilisez Createdatabase pour créer une base de données et utilisez Sélectionner une base de données; 3. Utilisez CreateTable pour créer une table, définissez des champs et des types de données; 4. Utilisez InsertInto pour insérer des données, remettre en question les données, mettre à jour les données par mise à jour et supprimer les données par Supprimer. Ce n'est qu'en maîtrisant ces étapes, en apprenant à faire face à des problèmes courants et à l'optimisation des performances de la base de données que vous pouvez utiliser efficacement MySQL.

La clé du contrôle des plumes est de comprendre sa nature progressive. Le PS lui-même ne fournit pas la possibilité de contrôler directement la courbe de gradient, mais vous pouvez ajuster de manière flexible le rayon et la douceur du gradient par plusieurs plumes, des masques correspondants et des sélections fines pour obtenir un effet de transition naturel.

MySQL a une version communautaire gratuite et une version d'entreprise payante. La version communautaire peut être utilisée et modifiée gratuitement, mais le support est limité et convient aux applications avec des exigences de stabilité faibles et des capacités techniques solides. L'Enterprise Edition fournit une prise en charge commerciale complète pour les applications qui nécessitent une base de données stable, fiable et haute performance et disposées à payer pour le soutien. Les facteurs pris en compte lors du choix d'une version comprennent la criticité des applications, la budgétisation et les compétences techniques. Il n'y a pas d'option parfaite, seulement l'option la plus appropriée, et vous devez choisir soigneusement en fonction de la situation spécifique.

L'interface de chargement de la carte PS peut être causée par le logiciel lui-même (corruption de fichiers ou conflit de plug-in), l'environnement système (corruption du pilote ou des fichiers système en raison), ou matériel (corruption du disque dur ou défaillance du bâton de mémoire). Vérifiez d'abord si les ressources informatiques sont suffisantes, fermez le programme d'arrière-plan et publiez la mémoire et les ressources CPU. Correction de l'installation de PS ou vérifiez les problèmes de compatibilité pour les plug-ins. Mettre à jour ou tomber la version PS. Vérifiez le pilote de la carte graphique et mettez-le à jour et exécutez la vérification du fichier système. Si vous résumez les problèmes ci-dessus, vous pouvez essayer la détection du disque dur et les tests de mémoire.

La plume PS est un effet flou du bord de l'image, qui est réalisé par la moyenne pondérée des pixels dans la zone de bord. Le réglage du rayon de la plume peut contrôler le degré de flou, et plus la valeur est grande, plus elle est floue. Le réglage flexible du rayon peut optimiser l'effet en fonction des images et des besoins. Par exemple, l'utilisation d'un rayon plus petit pour maintenir les détails lors du traitement des photos des caractères et l'utilisation d'un rayon plus grand pour créer une sensation brumeuse lorsque le traitement de l'art fonctionne. Cependant, il convient de noter que trop grand, le rayon peut facilement perdre des détails de bord, et trop petit, l'effet ne sera pas évident. L'effet de plumes est affecté par la résolution de l'image et doit être ajusté en fonction de la compréhension de l'image et de la saisie de l'effet.
