95% de las veces, se debe poner todas sus importaciones en la parte superior del archivo. Un caso donde es posible que desee realizar una importación de función local es si tiene que hacerlo para evitar importaciones circulares. Digamos que foo.py importa bar.py, y una función en bar.py necesita importar algo de foo.py. Si coloca todas sus importaciones en la parte superior, podría tener problemas inesperados al importar archivos que se basan en información que aún no se ha compilado. En este caso, tener una función de importación local puede permitir que su código se mantenga detenido al importar el otro módulo hasta que su código haya sido completamente compilado, y usted llame a la función correspondiente.
Sin embargo, parece que su caso de uso se trata más bien de dejar claro de dónde viene foo(). En este caso, yo preferiría ahora una de dos cosas:
En primer lugar, en vez de
from prerequisite import foo
requisito previo de importación directa, y más adelante se refieren a ella como prerequisite.foo. La verbosidad agregada se paga a sí misma gracias al aumento de la transparencia del código.
Alternativamente, (o junto con el anterior) si realmente es una distancia tan larga entre su importación y el lugar donde se está utilizando, es posible que su módulo sea demasiado grande. La necesidad de una importación que nada más use podría ser una indicación de un lugar donde su código podría ser refactorizado en un pedazo de tamaño más manejable.
duplicado posible de [Python - importación en caso de] (http://stackoverflow.com/questions/12860841/python-import-in-if) – Abhijeet