/ / Bedeutung der Python-Modulkonstanten - Python, Python-3.x, Tkinter, Konstanten

Bedeutung von Python-Modul-Konstanten - Python, Python-3.x, Tkinter, Konstanten

Während des Lernens über die tkinter Modul stieß ich auf ein paar Variablen wie tkinter.TOP, tkinter.BOTTOM, tkinter.NW, etc.

Das habe ich auch gelernt tkinter funktioniert genauso gut, wenn Sie sie durch Zeichenfolgen wie ersetzen "top", "bottom", "nw" beziehungsweise.

Ich habe versucht, diese Variablen zu untersuchen und festgestellt, dass es sich nur um String-Objekte handelt:

>>> import tkinter
>>> tkinter.TOP
"top"
>>> type(tkinter.TOP)
<class "str">

Meine Frage ist, was ist der Nutzen dieses "Moduls"?Konstanten "Wenn sie nur durch Zeichenfolgen ersetzt werden können? Bieten sie eine Leistungsverbesserung? Ich habe eine Weile gegoogelt, konnte aber keine Erklärung finden.

Antworten:

1 für die Antwort № 1

Meine Empfehlung ist, niemals den tkinter zu benutzenKonstanten. Ich vermute, dass sie hinzugefügt wurden, um pythonischer zu sein, aber meiner Meinung nach macht es den Code nur schwerer zu lesen. Sie bieten keine Leistungsverbesserungen gegenüber der Verwendung von String-Literalen. Es ist jedoch harmlos, sie zu verwenden, sodass es wirklich auf die persönlichen Vorlieben ankommt.

Ihr interner Wert wird sich wahrscheinlich nie ändern1 Es hat also einfach keinen Vorteil, die Konstante gegenüber dem String-Literal zu verwenden, das sie darstellt.

Der zusätzliche Vorteil der Verwendung von String-Literalen besteht darin, dass weniger Code erforderlich ist. Zum Beispiel finde ich Folgendes:

something.grid(..., sticky="nsew")

... dem viel vorzuziehen:

something.grid(..., sticky=tk.N+tk.S+tk.E+tk.W)

Es ist auch erwähnenswert, dass die offizielle tkinter-Dokumentation häufig die Verwendung der String-Literale anstelle dieser Konstanten zeigt. Zum Beispiel:


1 Tk - die Bibliothek, auf der tkinter basiert - ist abwärtskompatibel sehr ernst. Diese Konstanten haben sich nicht geändert Jahrzehnte. Vorausgesetzt, die Konstante nennt sichspiegeln den tatsächlichen Wert der Konstante wider. Sollte sich der Wert jemals ändern, ist es fast sicher, dass sich auch der Name der Konstante ändert. Es wäre ziemlich seltsam, wenn eine Konstante benannt würde N definiert werden als "top" oder "upper" oder wie auch immer der neue Wert sein mag.


2 für die Antwort № 2

Tkinter bietet a tkinter.constants Modul, das alle Konstanten enthält (aka. Top, Left, ...). Beim importieren der tkinter Modul, tkinter.constants wird automatisch importiert.

Normalerweise können Sie:

import tkinter
from tkinter.constants import *

print(TOP)

Sie müssen also nicht alle Konstanten definieren, die Sie in Ihrem Code manuell verwenden müssen.

import tkinter

TOP = "top"
LEFT = "left"

Plus, es gibt immer eine Chance, dass tkinter Vielleicht möchten Sie einige der Konstanten in etwas anderes ändern. (Veränderung TOP zur Nummer 3) Da es weniger Bytes enthält als "top"Es nimmt also weniger Platz ein.

Die Verwendung der vom Modul bereitgestellten Konstanten garantiert, dass die Konstanten in der aktuellen Implementierung immer richtig definiert sind.


2 für die Antwort № 3

Sofern in der Dokumentation nicht angegeben ist, dass Sie eine der beiden Methoden verwenden können, verwenden Sie die Konstante im Modul.

Die Idee ist, dass die tatsächliche Implementierung von (zum Beispiel) BOTTOM ist versteckt, so dass die Entwickler frei sind, es zu ändern (Verkapselung). Sie könnten zum Beispiel diese ganze Zahl fühlen 42 wäre effizienter zu verwenden als der Text "bottom" (und es würde wahrscheinlich). Diese Änderung würde jeden, der die Annahme für die Textzeichenfolge getroffen hat, zum Erliegen bringen.

Wegen einiger weniger eingegebenen Zeichen ist die Verwendung des zugrunde liegenden Werts das Risiko nicht wert.


0 für die Antwort № 4

Das Besondere an solchen Konstanten für tkinter- und Python-Module im Allgemeinen ist, dass Sie sie bei Bedarf manuell überschreiben können. Dies ist nicht nur für String-Konstanten relevant, sondern auch für die allgemeine Konfiguration.

Ich kenne tkinter nicht, aber wahrscheinlich werden sie irgendwo im Code verwendet und die Entwickler von tkinter wollten Ihnen die Möglichkeit geben, das Verhalten einfach durch Überschreiben zu beeinflussen.

Zum Beispiel wann mit matplotlib, ein Paket zum Plotten, können Sie Dinge wie

import matplotlib as mpl
mpl.rcParams["lines.linewidth"] = 2

um die Linienstärke der Diagramme zu ändern.


0 für die Antwort № 5

Ein Punkt ist, dass Konstanten eine einzelne Kopie bedeuten. Weniger Platz benötigt, kein GC erforderlich.

Zweitens: Der Vergleich kann schneller durchgeführt werden, wenn Sie wissen, dass es sich um dasselbe Objekt handelt.

Weiter - Code-Vervollständigung - funktioniert.

Wenn etwas geändert wird, muss nur das zugrunde liegende Teil geändert werden, da Ihr Code nur namentlich darauf verweist.