Al ejecutar
import pygame
la pygame está totalmente importado y listo para trabajar, no se necesitan más importaciones.
Ahora la pregunta es sobre esta línea:
from pygame.locals import *
Hay varias razones por las cuales esto se debe utilizar, y algunas de las razones para no hacerlo.
- Rendimiento. Cuando escribe algo como
foo.bar.baz.ClassName.classmethod()
, habrá 4 búsquedas en el espacio de nombres, que le costará algo de tiempo. Cuantas más líneas en el código, más pérdida de tiempo innecesaria.
- Simplicidad. Cuando escribe tutoriales, intenta explicar las cosas de la manera más simple posible. Por lo tanto, cuanto menos código, mejor tutorial.
- Facilidad. Cuando escribe su código, lo extiende a diferentes archivos. Porque es más fácil trabajar con archivos secundarios más pequeños, y luego importarlos todos en el principal. Pero usted comprende completamente lo que está importando.
- Contaminación de paquetes de nombres. Cuando importa todo, desde el módulo a los globales, está más limitado en la elección de las variables globales. Por ejemplo,
from struct import *
, no puede nombrar su función como pack
. Entonces, antes de usar tales importaciones, debe explorar el módulo. ¿Qué contiene? ¿Qué importa por sí mismo?
- Mess. Cuando utiliza tales importaciones muchas veces,
from foo import *
y from bar import *
y from baz import *
, algunas variables o constantes pueden sombrearse o sobrescribirse. En este ejemplo, foo.version
se sobrescribe con bar.version
, ahora denominado version
. Entonces, foo.checkversion()
ya no funcionará correctamente.
La forma correcta es importar las funciones comúnmente usadas en forma explícita, o hacerlas una referencia rápida, especialmente cuando no se conoce bien el módulo.
Por ejemplo:
from foo.bar.baz import a_very_useful_function
o
import foo.bar.baz
quick_referenced_fn = foo.bar.baz.a_very_useful_function
Aquí quick_referenced_fn
sigue siendo foo.bar.baz.a_very_useful_function
y trabaja en el espacio de nombres de foo.bar.baz
, pero intérprete conoce su dirección directamente y no realizar búsquedas adicionales.
Eso parece un poco redundante. – corazza
@Bane: no es redundante. Está dejando muy claro lo que se pone en su espacio de nombres, y cómo. –
'pygame.locals' se llama locals porque está lleno de funciones que llama con frecuencia. Agregar 'pygame.locals' cada vez haría que el código fuera menos compacto. –