2010-06-08 13 views

Odpowiedz

34

Skrypt jest generalnie bezpośrednio wykonywalnym kodem, uruchamianym samodzielnie. Moduł jest ogólnie biblioteką, importowaną przez inne fragmenty kodu.

Należy zauważyć, że nie ma wewnętrznego rozróżnienia - oba są wykonywalne i można je importować, chociaż kod biblioteki często nic nie robi (lub po prostu uruchamia testy jednostkowe), gdy zostanie wykonany bezpośrednio, a zaimportowanie kodu zaprojektowanego jako skrypt spowoduje jego do wykonania, stąd wspólny test if __name__ == "__main__".

+2

+1: "brak wewnętrznego rozróżnienia". Po prostu tak go używasz. –

+2

Tak. Poza tym, o ile mówimy o wyróżnieniach, nazwałbym to programem (nie skryptem), chyba że jego głównym zastosowaniem był skrypt działań innych programów. –

10

Każdy moduł Pythona może zostać wykonany jako skrypt. Jedyną znaczącą różnicą jest to, że po zaimportowaniu jako moduł nazwa pliku jest podstawą nazwy modułu, natomiast jeśli wykonasz go jako skrypt, moduł ma nazwę __main__.

To rozróżnienie umożliwia zachowanie różnych zachowań po zaimportowaniu przez dołączenie kodu skryptu do bloku chronionego przez if __name__=="__main__". Powodowało to zamieszanie, gdy użytkownik próbował zaimportować moduł główny pod własną nazwą zamiast importować __main__.

Niewielka różnica między skryptami i modułami polega na tym, że podczas importowania modułu system spróbuje użyć istniejącego pliku .pyc (pod warunkiem, że istnieje i jest aktualny oraz dla tej wersji Pythona) i jeśli musi skompilować z pliku .py, spróbuje zapisać plik .pyc. Po uruchomieniu pliku .py jako skryptu nie próbuje załadować wcześniej skompilowanego modułu, ani nie będzie próbował zapisać skompilowanego kodu. Z tego powodu warto zachować małe skrypty, aby zminimalizować czas uruchamiania.

+0

Proponuję zastąpić wyrażenie * wykonane jako skrypt * po prostu * wykonane *, być może także pozostałe wystąpienia * skryptu * przez * program * zgodnie z sugestią w [komentarzu ʇsәɹoɈ] (https://stackoverflow.com/ pytania/2996110/what-is-the-the-difference-between-a-module-and-a-script-in-python # comment3060238_2996170) – Wolf

Powiązane problemy