


Accès aux variables de classe à partir de compréhensions de liste dans les définitions de classe
Dans Python 2, l'accès aux variables de classe à partir d'une compréhension de liste dans la définition de classe était possible. Cependant, dans Python 3 et versions ultérieures, cela n'est pas autorisé en raison de restrictions de portée. La portée de la classe est traitée séparément de la portée des compréhensions et des autres fonctions et, par conséquent, l'accès aux variables de classe à partir d'une compréhension en utilisant des noms n'est pas autorisé.
Par exemple, le code suivant en Python 2 fonctionnerait :
class Foo: x = 5 y = [x for i in range(1)]
Cependant, en Python 3, cela entraînerait une erreur :
NameError: name 'x' is not defined
Pourquoi et comment la portée La restriction fonctionne
La raison de cette restriction est due à la façon dont Python gère les étendues. Lors de l’évaluation d’une compréhension de liste dans une définition de classe, Python crée une nouvelle portée pour cette compréhension. Cette nouvelle portée n'inclut pas la portée de la classe, donc toutes les variables définies dans la portée de la classe ne sont pas visibles dans la compréhension.
Les compréhensions, les expressions génératrices et les fonctions lambda ont toutes leurs propres portées isolées, ce qui signifie qu'elles ne peuvent pas accéder directement aux variables à partir de la fonction englobante ou de la portée de la classe. Il s'agit d'une mesure de sécurité qui empêche les modifications involontaires des variables dans la portée englobante.
Solutions de contournement
Il existe quelques solutions de contournement à cette restriction :
- Utiliser une fonction temporaire : Vous pouvez définir une fonction au sein de la classe qui transmet explicitement la variable de classe au compréhension :
class Foo: x = 5 def get_y(self, x): return [x for i in range(1)] y = get_y(x)
- Utiliser Nonlocal : Ce mot-clé peut être utilisé pour demander à une fonction dans une portée imbriquée de modifier une variable dans une portée englobante :
class Foo: x = 5 def get_y(): nonlocal x return [x for i in range(1)] y = get_y()
- Utiliser une variable d'instance : Au lieu de en stockant le résultat de compréhension sur la classe elle-même, vous pouvez le stocker sur une instance :
class Foo: def __init__(self): self.y = [self.x for i in range(1)]
- Utiliser un attribut de fonction : Semblable à l'utilisation d'une fonction temporaire, vous pouvez également définir un attribut de fonction qui stocke la variable de classe :
class Foo: x = 5 @classmethod def get_y(cls): y = [cls.x for i in range(1)] return y Foo.y = Foo.get_y()
Il est important de noter que même si ces solutions de contournement permettent vous pouvez accéder aux variables de classe à partir des compréhensions, elles introduisent une complexité supplémentaire à votre code. Réfléchissez attentivement à l'approche la plus adaptée à vos besoins spécifiques.
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!

Python excelle dans les jeux et le développement de l'interface graphique. 1) Le développement de jeux utilise Pygame, fournissant des fonctions de dessin, audio et d'autres fonctions, qui conviennent à la création de jeux 2D. 2) Le développement de l'interface graphique peut choisir Tkinter ou Pyqt. Tkinter est simple et facile à utiliser, PYQT a des fonctions riches et convient au développement professionnel.

Python convient à la science des données, au développement Web et aux tâches d'automatisation, tandis que C convient à la programmation système, au développement de jeux et aux systèmes intégrés. Python est connu pour sa simplicité et son écosystème puissant, tandis que C est connu pour ses capacités de contrôle élevées et sous-jacentes.

Vous pouvez apprendre les concepts de programmation de base et les compétences de Python dans les 2 heures. 1. Apprenez les variables et les types de données, 2. Flux de contrôle maître (instructions et boucles conditionnelles), 3. Comprenez la définition et l'utilisation des fonctions, 4. Démarrez rapidement avec la programmation Python via des exemples simples et des extraits de code.

Python est largement utilisé dans les domaines du développement Web, de la science des données, de l'apprentissage automatique, de l'automatisation et des scripts. 1) Dans le développement Web, les cadres Django et Flask simplifient le processus de développement. 2) Dans les domaines de la science des données et de l'apprentissage automatique, les bibliothèques Numpy, Pandas, Scikit-Learn et Tensorflow fournissent un fort soutien. 3) En termes d'automatisation et de script, Python convient aux tâches telles que les tests automatisés et la gestion du système.

Vous pouvez apprendre les bases de Python dans les deux heures. 1. Apprenez les variables et les types de données, 2. Structures de contrôle maître telles que si les instructions et les boucles, 3. Comprenez la définition et l'utilisation des fonctions. Ceux-ci vous aideront à commencer à écrire des programmes Python simples.

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Chargement des fichiers de cornichons dans Python 3.6 Rapport de l'environnement Erreur: modulenotFoundError: NomoduLenamed ...


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

Version Mac de WebStorm
Outils de développement JavaScript utiles

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

Dreamweaver Mac
Outils de développement Web visuel

mPDF
mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire