/ / Importanza delle costanti del modulo python: python, python-3.x, tkinter, costanti

Importanza delle costanti del modulo python: python, python-3.x, tkinter, costanti

Durante l'apprendimento del tkinter modulo, mi sono imbattuto in alcune variabili come tkinter.TOP, tkinter.BOTTOM, tkinter.NW, eccetera.

L'ho anche imparato tkinter funzionerà altrettanto bene se li sostituisci con stringhe come "top", "bottom", "nw" rispettivamente.

Ho provato a indagare su queste variabili e ho scoperto che si limitano a stringere gli oggetti:

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

La mia domanda è, a che serve questo "modulo"costanti "se possono essere sostituiti da stringhe? Forniscono una sorta di miglioramento delle prestazioni? Ho cercato su Google per un po 'ma non ho trovato una spiegazione.

risposte:

1 per risposta № 1

La mia raccomandazione è di non usare mai il tkintercostanti. La mia ipotesi è che siano stati aggiunti per essere più pitonici, ma a mio parere, rende solo più difficile leggere il codice. Non forniscono miglioramenti delle prestazioni rispetto all'uso delle stringhe letterali. È innocuo usarli, quindi, in realtà si riduce alle preferenze personali.

Il loro valore interno probabilmente non cambierà mai1 quindi non c'è semplicemente alcun vantaggio nell'usare la costante sulla stringa letterale che rappresenta.

Il vantaggio aggiunto nell'utilizzo di stringhe letterali è che richiede meno codice. Ad esempio, trovo questo:

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

... molto preferibile a questo:

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

Vale anche la pena notare che la documentazione ufficiale di tkinter mostra abbastanza spesso l'uso delle stringhe letterali piuttosto che di queste costanti.


1 Tk - la libreria su cui è costruito tkinter - accetta la compatibilità all'indietro molto sul serio. Queste costanti non sono cambiate in decenni. Dato che i nomi costanti stessiriflettono il valore reale della costante, se il valore dovesse mai cambiare, allora è quasi certo che cambierà anche il nome della costante: sarebbe piuttosto strano avere una costante chiamata N essere definito come "top" o "upper" o qualunque sia il nuovo valore.


2 per risposta № 2

Tkinter fornisce a tkinter.constants modulo che contiene tutte le costanti (aka. Top, Left, ...). Quando importi il ​​file tkinter modulo, tkinter.constants viene importato automaticamente.

Di solito puoi fare:

import tkinter
from tkinter.constants import *

print(TOP)

Quindi non è necessario definire manualmente tutte le costanti che è necessario utilizzare nel codice.

import tkinter

TOP = "top"
LEFT = "left"

Inoltre, c'è sempre una possibilità tkinter potrebbe voler cambiare alcune delle costanti in qualcos'altro. (Modificare TOP al numero 3) Dal momento che contiene meno byte di "top", quindi occupa meno spazio.

L'uso delle costanti fornite dal modulo garantisce che le costanti vengano sempre definite correttamente nell'implementazione corrente.


2 per risposta № 3

A meno che la documentazione indichi che è possibile utilizzare entrambi i metodi, utilizzare la costante nel modulo.

L'idea è che l'effettiva implementazione di (per esempio) BOTTOM è nascosto in modo che gli sviluppatori siano liberi di modificarlo (incapsulamento). Potrebbero, ad esempio, ritenere quello intero 42 sarebbe più efficiente da usare rispetto al testo "in basso" (e probabilmente lo sarebbe). Quel cambiamento avrebbe spezzato chiunque avesse fatto l'ipotesi della stringa di testo.

Per motivi di pochi caratteri digitati, l'utilizzo del valore sottostante non vale il rischio.


0 per risposta № 4

La cosa su queste costanti per i moduli tkinter e python in generale è che puoi sovrascriverlo manualmente se necessario. Questo non è rilevante solo per le costanti di stringa, ma per la configurazione generale.

Non sono a conoscenza di tkinter, ma probabilmente sono usati da qualche parte nel codice e gli sviluppatori di tkinter volevano darti la possibilità di influenzare semplicemente il comportamento sovrascrivendoli.

Ad esempio, quando usando Matplotlib, un pacchetto per la trama, puoi fare cose come

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

per impostare la larghezza di riga dei grafici diversi da quelli predefiniti.


0 per risposta № 5

Un punto è che costanti significa copia singola. Meno spazio utilizzato, nessun GC necessario.

Secondo: il confronto può essere eseguito più velocemente se si sa che si tratta dello stesso oggetto.

Successivo - completamento del codice - funziona.

Se qualcosa è cambiato - solo la parte sottostante deve essere cambiata - dal momento che il tuo codice si riferisce solo a esso, per nome.