Quando si esegue
import pygame
il pygame è completamente importato e pronti a lavorare, non sono necessarie maggiori importazioni.
Ora la domanda è su questa linea:
from pygame.locals import *
Ci sono diversi motivi per cui questo dovrebbe essere usato, e un paio di ragioni per non farlo.
- Prestazioni. Quando si digita qualcosa come
foo.bar.baz.ClassName.classmethod()
, ci saranno 4 ricerche nello spazio dei nomi, che costano un po 'di tempo. Più linee di questo tipo nel codice, più inutili perdite di tempo.
- Semplicità. Quando si scrivono tutorial, si tenta di spiegare le cose il più semplice possibile. Quindi meno codice, il tutorial migliore.
- Facilità. Quando si digita il codice, lo si diffonde in file diversi. Perché è più facile lavorare con file laterali più piccoli e quindi importarli tutti nel main. Ma capisci completamente cosa stai importando.
- Inquinamento di Namespase. Quando si importa tutto dal modulo in globals, si è più limitati nella scelta delle variabili globali. Ad esempio,
from struct import *
non è possibile assegnare un nome alla funzione come pack
. Quindi, prima di utilizzare tali importazioni, dovresti esplorare il modulo. Cosa contiene? Cosa importa da solo?
- Mess. Quando si utilizzano tali importazioni molte volte,
from foo import *
e from bar import *
e from baz import *
, alcune variabili o costanti possono essere ombreggiate o sovrascritte. In questo esempio, foo.version
viene sovrascritto con bar.version
, ora denominato come version
. Quindi, foo.checkversion()
non funzionerà più correttamente.
Il modo corretto consiste nell'importare le funzioni comunemente utilizzate in forma esplicita o renderle un riferimento rapido, soprattutto quando non si conosce bene il modulo.
Ad esempio:
from foo.bar.baz import a_very_useful_function
o
import foo.bar.baz
quick_referenced_fn = foo.bar.baz.a_very_useful_function
Qui quick_referenced_fn
è ancora foo.bar.baz.a_very_useful_function
e lavora nello spazio dei nomi di foo.bar.baz
, ma interprete sa il suo indirizzo direttamente e non farà le ricerche ulteriori.
Sembra un po 'ridondante. – corazza
@Bane: non è ridondante. Stai rendendo estremamente chiaro ciò che entra nel tuo spazio dei nomi, e come. –
'pygame.locals' è chiamato gente del posto perché è pieno di funzioni chiamate frequentemente. L'aggiunta di 'pygame.locals' ogni volta renderebbe il codice meno compatto. –