Pratique d'utilisation de ceci en Python (mauvais)

Aperçu

Une technique trouvée dans un certain OSS.

bs = BookShelf('Introduction à XX', 'Première fois YY', 'ZZ je n'entends plus')
bs.map_(lambda: print(this))

stdout


Introduction à XX
Première fois YY
ZZ je n'entends plus

«Ceci» qui est apparu soudainement. D'où vient-il?

Révéler

J'y travaillais avant d'appeler le rappel.

class Book:
    def __init__(self, name):
        self._name = name
        
    def __str__(self):
        return self._name

class BookShelf:
    def __init__(self, *book_names):
        self._books = [*map(Book, book_names)]
    
    def map_(self, callback):
        for book in self._books:
            callback.__globals__['this'] = book
            callback()
        
        del callback.__globals__['this']

Ce n'est pas grave si vous le comprenez, J'étais inquiet pendant un moment car je doutais de l'extension de l'interprète et de l'IDE.

Pourquoi je pense que c'est une mauvaise pratique

Je pense que c'est Pythonic de le passer comme un argument comme celui-ci:

class BookShelf:
    def __init__(self, *book_names):
        self._books = [*map(Book, book_names)]
    
    def map_(self, callback):
        for book in self._books:
            callback(book)

bs = BookShelf('Introduction à XX', 'Première fois YY', 'ZZ je n'entends plus')
bs.map_(lambda this: print(this))

Je veux bien prendre soin de Zen of Python.

Explicit is better than implicit. Il vaut mieux clarifier que suggérer.

** Référence **: Qiita - Le Zen de Python

Recommended Posts

Pratique d'utilisation de ceci en Python (mauvais)
Résumé des opérations Excel utilisant OpenPyXL en Python
Bases de l'écran d'entrée / sortie en utilisant tkinter en python3
Jugement d'équivalence d'objet en Python
python: principes de base de l'utilisation de scikit-learn ①
Présentation de Python en pratique (PiP)
Implémentation du tri rapide en Python
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
Mémo de connexion SSH utilisant ProxyCommand de ssh_config en Python
Un mémo que j'ai écrit une fonction de base en Python en utilisant la récurrence
Manipulation des pixels d'image en Python
Programmation GUI en Python avec Appjar
Capture d'image de Firefox en utilisant Python
Précautions lors de l'utilisation de Pit avec Python
Diviser timedelta dans la série Python 2.7
Suppression de la brume à l'aide de Python detailEnhanceFilter
Échappement automatique des paramètres MySQL en python
Gestion des fichiers JSON en Python
Essayez d'utiliser LevelDB avec Python (plyvel)
Implémentation du jeu de vie en Python
Affichage de la forme d'onde audio en Python
Utilisation de variables globales dans les fonctions python
Ceci et cela des propriétés python
Voyons voir l'utilisation de l'entrée en python
Puissance totale en Python (en utilisant functools)
Implémentation des notifications de bureau à l'aide de Python
La loi des nombres en python
Implémentation du tri original en Python
Algorithme (arborescence de segments) en Python (s'entraîner)
Brouillage réversible d'entiers en Python
Reconnaissance de caractères manuscrits à l'aide de KNN en Python
Essayez d'utiliser LeapMotion avec Python
Recherche de priorité de profondeur à l'aide de la pile en Python
Lors de l'utilisation d'expressions régulières en Python
Création d'interface graphique en python avec tkinter 2
Ecrire diverses formes d'arbres phylogénétiques en Python à l'aide de la boîte à outils ETE
Fonctionnement de la souris à l'aide de l'API Windows en Python
Conversion de la chaîne <-> date (date, datetime) en Python
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Collecte automatique des cours boursiers à l'aide de python
À propos de la création de l'interface graphique à l'aide de TKinter de Python
Essayez d'utiliser l'API Wunderlist en Python
Création d'interface graphique en python à l'aide de tkinter partie 1
Vérifiez le comportement du destroyer en Python
Obtenir l'équilibre Suica en Python (en utilisant libpafe)
Hachez lentement les mots de passe en utilisant bcrypt en Python
Théorie générale de la relativité en Python: Introduction
Essayez d'utiliser l'API Kraken avec Python
Utilisation de venv dans un environnement Windows + Docker [Python]
Arborescence de sortie des fichiers en Python
[Linux] Liste des commandes Linux utilisées dans la pratique
Afficher une liste d'alphabets en Python 3
Comparaison des modules de conversion japonais en Python3
[FX] Hit oanda-API avec Python en utilisant Docker
Python: Application de la reconnaissance d'image à l'aide de CNN
Résumé de diverses instructions for en Python