Rzeczywiście, jak już wspomniano, zwykle najlepiej jest stosować się do zaleceń PEP 8 i importować je na samym szczycie. Są jednak wyjątki. Kluczem do ich zrozumienia jest osadzone pytanie w drugim akapicie: "na jakim etapie odbywa się import ...?"
Import jest w rzeczywistości instrukcją wykonywalną. Podczas importowania modułu wszystkie instrukcje wykonywalne w module działają. "def" jest również instrukcją wykonywaną; jego wykonanie powoduje, że zdefiniowana nazwa jest powiązana z (już skompilowanym) kodem. Więc jeśli masz:
def f():
import something
return None
w module importowanego, The (skompilowany) import i instrukcja powrotu dostać związane z nazwą „f” w tym punkcie. Kiedy wykonasz , wykonasz f(), wtedy zostanie uruchomiona instrukcja import.
Jeśli odroczysz importowanie czegoś, co jest "bardzo duże" lub "ciężkie", a następnie nigdy nie uruchamiasz tej funkcji (w tym przypadku f), import nigdy się nie dzieje. To oszczędza czas (i trochę miejsca). Oczywiście, gdy już zadzwonisz do f(), nastąpi import (jeśli już się to stało, gdy Python użyje wyniku z pamięci podręcznej, ale nadal musi to sprawdzić), abyś stracił przewagę czasową.
W związku z tym, z zasady, "importuj wszystko na wierzchu", aż do momentu, gdy wykonałeś wiele profilowań i odkryłeś, że importowanie "uścisku dłoni" marnuje dużo czasu w 90% twoich przebiegów, a oszczędzanie mało czasu w 10% z nich.
+1 dla PEP8. Moduł [pep8 module] (http://pypi.python.org/pypi/pep8) sprawdza twój kod przed wytycznymi PEP8. –