API-Design ist eine Kunstaktivität. Oft muss es einfach, leicht verständlich, ordentlich und nicht umständlich sein.
Oft kapseln wir eine Methode auf der untersten Ebene für die Verwendung auf hoher Ebene, und andere Methoden dienen lediglich der Unterstützung dieser Methode.
Das heißt, wir müssen diese Methode nur offenlegen und müssen uns nicht darum kümmern, wie diese Methode implementiert wird oder ob andere Hilfsmethoden vorhanden sind.
In Python gibt es mehrere Strategien, um Namespaces sauber zu halten.
1. Variablennamen, die mit Unterstrich _ beginnen
Variablen, die mit Unterstrich _ beginnen, werden nicht importiert, wenn andere Module aus xxx importieren *.
Wenn Sie sich den Quellcode von Decimal ansehen, werden Sie feststellen, dass die importierten Module viele Male in Aliase geändert wurden, die mit dem Unterstrich _ beginnen.
http://hg.python.org/cpython/file/2.7/Lib/decimal.py wie
import copy as _copy import math as _math import numbers as _numbers
Dies ist kein Ärgernis, es dient dazu, eine Verschmutzung des Namespace zu vermeiden
2. Definieren Sie __all__
Pythons magische Methode ist wirklich flexibel.
Angenommen, es gibt drei Methoden a(), b(), c() in meinem Modul.
Ich möchte nur a verfügbar machen, nicht b und c.
Zu diesem Zeitpunkt ist __all__=[a]
Wenn andere Module aus xxxmodule import * importiert werden, wird nur a importiert.
Und wenn der Entwickler den Quellcode liest und __all__ sieht, weiß er sofort, welche Methoden offengelegt werden müssen, anstatt einen Haufen Code ohne Startmöglichkeit.
3. Nachdem Sie diese Variable verwendet haben, löschen Sie
bis del xxx.
Dies reduziert die Anzahl der Variablen, die den Bildschirm in dir (xxxmodule) füllen.
Ähnlich können Sie im Quellcode von Decimal sehen, dass es nach Verwendung des regulären Ausdrucksmoduls re mit del re gelöscht wurde.
Eine andere Methode besteht darin, die Importanweisung in die Funktion einzufügen, um sie auf den lokalen Bereich zu beschränken. Ich bin der Meinung, dass diese Methode nicht pythonisch ist, daher empfehle ich sie nicht.
Weitere Artikel zur Standarddefinition von Namespaces in Python finden Sie auf der chinesischen PHP-Website!