2012-12-26 15 views

Odpowiedz

16

Możesz zanieczyścić przestrzeń nazw nazwami, które mogą zakłócać twoje zmienne i zajmować trochę pamięci.
Również będziesz mieć dłuższy czas uruchamiania, ponieważ program musi załadować moduł.

W każdym razie nie stałbym się zbyt neurotyczny, jak gdybyś pisał kod, który mógłbyś napisać i usunąć import os w sposób ciągły w miarę modyfikacji kodu. Niektóre IDE jako PyCharm wykrywają nieużywane importowanie, więc możesz polegać na nich po zakończeniu lub prawie ukończeniu kodu.

+1

Program potrwa zatem dłużej niż w przypadku niepotrzebnego importu. dobrze ? –

+0

prawdą, że to prawda – joaquin

+0

Opóźnienie czasu uruchomienia można wizualizować, tworząc kilka plików z 'print" Hello ", __name__', a następnie importując je. Wszystko, co zaimportowane, musi zostać przeanalizowane co najmniej raz, a następnie wersja programu pyc/cache jest interpretowana co najmniej raz na cykl. To może trochę wymknąć się spod kontroli, szczególnie jeśli jeden importowany plik importuje inne pliki, które importują jeszcze więcej plików. – David

6

„Nieużywane” może być nieco trudniejsze do zdefiniowania, niż myślisz, na przykład ten kod w test.py:

import sys 
import unused_stuff 
sys.exit(0) 

unused_stuff wydaje się być nieużywany, ale gdyby zawierać:

import __main__ 
def f(x): print "Oh no you don't" 
__main__.sys.exit = f 

Następnie uruchomienie test.py nie robi tego, czego można się spodziewać po zwyczajnym spojrzeniu.

+0

nadzieję, że nikt nie pisze bibliotek z takim kodem. Ten import byłby niebezpieczny, nawet gdyby OP planował ** użyć ** tego modułu. – joaquin

+2

@joaquin Prawdą jest, że jest to skrajny przykład, ale to nie znaczy, że nie ma modułów, które po załadowaniu mają bardziej subtelne efekty uboczne. Miało to być trywialną ilustracją efektu ubocznego :) – Flexo

+3

Mam dwa moduły, które mam w mojej osobistej bibliotece, której jedynym API jest import, to znaczy, że wszystko, co robisz, to importować je bez połączenia. Pierwszym z nich jest program nice.py, który uruchamia program z niższym priorytetem procesu, drugi to timing.py, który instaluje procedurę obsługi atexit, aby zgłosić czas i znacznik czasu, gdy uruchomiony program się zakończy. Oba mogą wyglądać na nieużywane, ale w rzeczywistości mają tylko super-minimalistyczny interfejs API. – PaulMcG

Powiązane problemy