Diferencia entre “from xy import z” y “import xyz as z”

En situaciones en las que desea importar un módulo nested a su espacio de nombres, siempre lo he escrito así:

from concurrent import futures 

Sin embargo, recientemente me di cuenta de que esto también se puede express utilizando la syntax “como”. Vea lo siguiente:

 import concurrent.futures as futures 

Lo que tiene la ventaja subjetiva de verse más similar a otras importaciones:

 import sys import os import concurrent.futures as futures 

… con la desventaja de mayor verbosidad.

¿Existe una diferencia funcional entre los dos o es una oficialmente preferida en un PEP o de otro tipo?

Hay algunas diferencias funcionales. Primero, como ya se mencionó en los comentarios, import package.thing as thing requiere thing sea ​​un módulo (o un subpaquete, que en realidad no es un caso separado porque los paquetes cuentan como módulos).

En segundo lugar, en Python 3.5 y versiones posteriores, si from package import thing encuentra que el objeto de módulo para el package no tiene un atributo de thing , intentará buscar sys.modules['package.thing'] como una alternativa. Esto fue agregado para manejar ciertos casos de importaciones relativas circulares. import package.thing as thing todavía no realiza este manejo, pero lo hará en Python 3.7.

 import concurrent.futures as futures 

Le permite hacer referencia al módulo bajo el espacio de nombres de futures en su código (a diferencia de concurrent.futures sin la syntax as ). Sin embargo, la escritura es en su mayoría redundante: estás importando algo y declarando que su nombre es exactamente lo mismo. La syntax estándar para este tipo de importación es la from import .

El punto sobresaliente de su pregunta es que la syntax as es principalmente para admitir múltiples importaciones del mismo nombre sin obstruirse entre sí. Por ejemplo.

 from concurrent import futures from other.module import futures as my_futures 

Cualquier otra cosa y usted está abusando de la syntax y para mí se consideraría antipatrón, porque el lenguaje le proporcionó una forma correcta de hacer lo que quería.