2012-05-05 24 views
6

Jestem programistą Java i zawsze tworzyłem oddzielne pliki dla klas, próbuję nauczyć się Pythona i chcę się go dobrze nauczyć. Jest to kosztowne w Pythonie, aby umieścić klas w różnych plikach, co oznacza, że ​​jeden plik zawiera tylko jedną klasę. Czytałem na blogu, że jest to kosztowne, ponieważ rozdzielczość operatora . dzieje się w czasie wykonywania w pythonie (dzieje się to podczas kompilacji dla Javy).Czy w Pythonie kosztowne jest umieszczanie klas w różnych plikach?

Uwaga: Czytałem w innych postach, że możemy umieścić je w oddzielnych plikach, ale nie wspomnieć, jeśli są one kosztowne w żaden sposób

Odpowiedz

8

Jest nieco bardziej kosztowne, ale nie w takim stopniu, prawdopodobnie będziesz się tym przejmować. Można negować ten dodatkowy koszt, wykonując:

from module import Class 

Jak to klasa będzie przypisana do zmiennej w lokalnej przestrzeni nazw, co oznacza, że ​​nie trzeba robić odnośnika przez moduł.

W rzeczywistości jest to mało prawdopodobne, aby było ważne. Koszt znalezienia czegoś takiego będzie niewielki i powinieneś skupić się na tym, co czyni twój kod najbardziej czytelnym. Podział klas między modułami i pakietami, tak jak jest logiczny dla twojego programu, i który sprawia, że ​​są jasne.

Jeśli na przykład używasz coś w pętli, która jest wąskim gardłem dla swojego programu, można assign it to a local variable for that loop, np

import module 

... 

some_important_thing = module.some_important_thing 

#Bottleneck loop 
for item in items: 
    #module.some_important_thing() 
    some_important_thing() 

pamiętać, że ten rodzaj optymalizacji jest mało prawdopodobne, aby być ważne i powinieneś tylko optymalizować, gdzie masz dowód, że musisz to zrobić.

+2

Myślę, że zniechęcenie to silny termin. Ogólnie rzecz biorąc, lepiej importować normalnie, aby nie zagracać przestrzeni nazw, tak. W niektórych przypadkach jednak, jeśli na przykład używasz czegoś zaimportowanego przez cały kod, nie ma nic złego w korzystaniu z tego rodzaju importu. –

+0

To jest niesamowita funkcja przechowująca nazwę klasy z modułem w zmiennej, która poprawi wydajność mojego kodu. –

+0

@ Lattyware Usunąłeś mój komentarz, ponieważ wspomniałeś o tym, co miałem na myśli w twojej edycji, ale co masz na myśli przez coś zaimportowanego? – jamylak

Powiązane problemy