Co robi, if __name__ == „__main__”:?

Co robi, if name == „main”:?

# Przykład wątku
import time, thread

def myfunction(string, sleeptime, lock, *args):
    while True:
        lock.acquire()
        time.sleep(sleeptime)
        lock.release()
        time.sleep(sleeptime)

if __name__ == "__main__":
    lock = thread.allocate_lock()
    thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
    thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))

1 odpowiedź

Najprostszym wyjaśnieniem dla zmiennej name (imho) jest:

Utworzenie następujących plików:

# a.py
import b

i

# b.py
print "Witaj świecie z %s!" % __name__

if __name__ == '__main__':
    print "Witaj świecie ponownie z %s!" % __name__

Uruchamianie ich da Ci to wyjście:

$ python a.py
Witaj świecie z b!

Jak widać, gdy moduł jest importowany, Python ustawia globals() ['__ name__'] w tym module na nazwę modułu. Ponadto po zaimportowaniu cały kod w module jest uruchamiany. Ponieważ instrukcja if ocenia na False, ta część nie jest wykonywana.

$ python b.py
Witaj świecie z __main__!
Witaj świecie ponownie z __main__!

Jak widać, podczas wykonywania pliku Python ustawia globals() ['__ name__'] w tym pliku na „main”. Tym razem instrukcja if ma wartość True i jest uruchamiana.

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.