Übung, dies in Python zu verwenden (schlecht)

Überblick

Eine Technik, die in einem bestimmten OSS zu finden ist.

bs = BookShelf('Einführung in XX', 'Zum ersten Mal YY', 'ZZ Ich kann nicht mehr hören')
bs.map_(lambda: print(this))

stdout


Einführung in XX
Zum ersten Mal YY
ZZ Ich kann nicht mehr hören

"Das", das plötzlich auftauchte. Woher kam das?

Verraten

Ich habe daran gearbeitet, bevor ich den Rückruf angerufen habe.

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']

Es ist keine große Sache, wenn Sie es verstehen, Ich war eine Weile besorgt, weil ich an der Erweiterung des Dolmetschers und der IDE zweifelte.

Warum ich denke, dass es schlechte Praxis ist

Ich denke, es ist pythonisch, es als Argument wie dieses zu übergeben:

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('Einführung in XX', 'Zum ersten Mal YY', 'ZZ Ich kann nicht mehr hören')
bs.map_(lambda this: print(this))

Ich möchte mich gut um Zen of Python kümmern.

Explicit is better than implicit. Es ist besser zu klären als zu implizieren.

** Referenz **: Qiita - Das Zen von Python

Recommended Posts

Übung, dies in Python zu verwenden (schlecht)
Zusammenfassung der Excel-Operationen mit OpenPyXL in Python
Grundlagen des Eingabe- / Ausgabebildschirms mit tkinter in python3
Objektäquivalenzbeurteilung in Python
Python: Grundlagen der Verwendung von Scikit-Learn ①
Einführung in Python in der Praxis (PiP)
Implementierung der schnellen Sortierung in Python
Übersetzt mit Googletrans in Python
Verwenden des Python-Modus in der Verarbeitung
Ssh-Verbindungsnotiz mit ProxyCommand von ssh_config in Python
Ein Memo, dass ich eine Grundfunktion in Python mit Wiederholung geschrieben habe
Bildpixel-Manipulation in Python
GUI-Programmierung in Python mit Appjar
Bilderfassung von Firefox mit Python
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Zeitdelta in Python 2.7-Serie teilen
Trübungsentfernung mit Python detailEnhanceFilter
MySQL-automatische Escape-Funktion von Parametern in Python
Umgang mit JSON-Dateien in Python
Versuchen Sie es mit LevelDB mit Python (plyvel)
Implementierung eines Lebensspiels in Python
Audio-Wellenform-Anzeige in Python
Verwendung globaler Variablen in Python-Funktionen
Dies und das von Python-Eigenschaften
Mal sehen, wie man Eingaben in Python verwendet
Gesamtleistung in Python (mit Funktools)
Implementierung von Desktop-Benachrichtigungen mit Python
Das Gesetz der Zahlen in Python
Implementierung der ursprünglichen Sortierung in Python
Algorithmus (Segmentbaum) in Python (Übung)
Reversibles Verwürfeln von Ganzzahlen in Python
Handschriftliche Zeichenerkennung mit KNN in Python
Versuchen Sie es mit LeapMotion mit Python
Suche nach Tiefenpriorität mit Stack in Python
Bei Verwendung regulärer Ausdrücke in Python
GUI-Erstellung in Python mit tkinter 2
Schreiben Sie mit dem ETE Toolkit verschiedene Formen phylogenetischer Bäume in Python
Mausbedienung mit Windows-API in Python
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Automatische Erfassung von Aktienkursen mit Python
Informationen zum Erstellen einer GUI mit TKinter of Python
Versuchen Sie es mit der Wunderlist-API in Python
GUI-Erstellung in Python mit tkinter Teil 1
Überprüfen Sie das Verhalten des Zerstörers in Python
Holen Sie sich Suica Balance in Python (mit libpafe)
Hash-Passwörter langsam mit bcrypt in Python
Allgemeine Relativitätstheorie in Python: Einführung
Versuchen Sie, die Kraken-API mit Python zu verwenden
Verwenden von venv in der Windows + Docker-Umgebung [Python]
Ausgabebaumstruktur von Dateien in Python
[Linux] Liste der in der Praxis verwendeten Linux-Befehle
Zeigen Sie eine Liste der Alphabete in Python 3 an
Vergleich japanischer Konvertierungsmodule in Python3
[FX] Hit oanda-API mit Python mit Docker
Python: Anwendung der Bilderkennung mit CNN
Zusammenfassung verschiedener for-Anweisungen in Python