logo

__name__ Pythonissa

Tällä hetkellä suoritettavan Python-skriptin tai moduulin nimi tallennetaan Pythonin erikoismuuttujaan __name__. Python 3.0 esitteli __name__-muuttujan, joka puuttuu Python 2:sta. x. Nykyinen Python-komentosarjan tai moduulin arvo, __main__, liitetään muuttujaan __name__, kun sitä ajetaan.

Mitä _nimi_ tarkoittaa?

Pythonissa on sisäänrakennettu muuttuja nimeltä __name__, joka tallentaa parhaillaan suoritettavan komentosarjan tai moduulin nimen. Komentosarja tai moduulin nimi tallennetaan muuttujaan __name__, ellei nykyinen moduuli ole käynnissä, jolloin sille annetaan arvo __main__.

Näin ollen Python-skriptiä suoritettaessa sen __name__-muuttujan arvon tulee aina olla __main__, jos se tuodaan toiseen Python-skriptiin. Jos ei, moduulin nimi tulee näkyviin.

Esimerkki:

Ymmärtääksemme tätä paremmin, käytetään esimerkkiä. Tehdä Pythonin komentosarja nimeltä testing.py, ja liitä siihen seuraava koodi:

 # Code to define a function def anything(): print('Value of the __name__ : ', __name__) anything() 

Lähtö:

 Value of the __name__ : __main__ 

Selitys:

Komentosarja toimii välittömästi pääohjelmana, kuten tulos 'Nimen arvo: main' osoittaa. Pythonissa komentosarjan __name__-muuttujan arvoksi asetetaan automaattisesti '__main__', kun komentosarja suoritetaan suoraan. Tämä tulos vahvistaa, että komentosarjaa ajetaan suoraan sen sijaan, että se tuodaan moduulina toiseen komentosarjaan

Rakennetaan nyt toinen Python-skripti nimeltä mains.py ja tuo edellinen siihen.

Esimerkki:

 # importing testing.py import testing testing.anything() 

Lähtö:

 Value of the __name__ : testing 

Selitys:

vertailukelpoinen merkkijono

testaus. any() on menetelmä, joka suoritetaan, kun komentosarja testing.py tuodaan toiseen Python-skriptiin tuontitestauksen avulla. Tässä tilanteessa moduulin nimi, tässä tapauksessa 'testing', asetetaan testing.py-muuttujan __name__ arvoksi __main__:n sijaan. Tästä syystä testauksen tulos. any() on '__name__:n arvo: testaus.' Tämä havainnollistaa, kuinka komentosarjan suorittaminen suoraan ja sen tuominen moduulina vaikuttaa muuttujan __name__ arvoon.

Käyttämällä ehtoa if name == main :

Käytämme jos lausunto ja kunto __nimi__ == __main__ julistamaan sitä tietty Python-koodi pitäisi vain olla suoritetaan, kun komentosarja suoritetaan suoraan .

Esimerkki:

 # importing testing.py import testing if __name__ == __main__: testing.anything() 

Tässä tapauksessa nykyisen moduulin tai komentosarjan kyky toimia itsenäisesti varmistetaan käyttämällä merkkijonoa __main__. Ilmaista Python-tulkijalle, että avainsana muuttujassa __name__ on varattu tai erityinen, termin molemmilla puolilla on kaksi alaviivaa.

Koodiesimerkki nimelle Pythonissa:

Kuten aiemmin mainittiin, kun käytämme kooditiedostoa, koodi suoritetaan suoraan - sitä ei edes tuoda toiseen tiedostoon - ja tämän seurauksena muuttujan __name__ arvo muuttuu __main__:ksi.

 # defining a function def anything(): print('It is a function in the ScriptP1.') if __name__=='__main__': anything() print('Called from the ScriptP1.') else: print('ScriptP1 is imported into another file.') 

Lähtö:

 It is a function in the ScriptP1. Called from the ScriptP1. 

Selitys:

Komentosarjassa ScriptP1 määritettyä funktiota any() ajetaan suoraan pääohjelmana, kuten tulos 'Se on ScriptP1:n funktio' osoittaa. jota seuraa 'Called from the ScriptP1.' Kun komentosarja suoritetaan suoraan Pythonissa, __name__-muuttuja asetetaan arvoon __main__; näin ollen ehto if __name__=='__main__': laskee arvoon True, kutsuen funktiota any(). Seuraava tulostuskäsky varmistaa, että komentosarja todellakin suoritetaan suoraan.

Tehdään nyt uusi Python-skriptitiedosto nimeltä ScriptP2.py, tuodaan ScriptP1.py siihen ja yritetään kutsua ScriptP1-metodia any().

Koodi: The ScriptP2.py koodi löytyy täältä:

 import ScriptP1 if __name__=='__main__': ScriptP1.anything() print('Called from the ScriptP2.') 

Lähtö:

 ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2. 

Selitys:

Mukana toimitettu Python-skripti näyttää, kuinka ScriptP1-moduuli tuodaan aktiiviseen komentosarjaan. Menetelmä 'anything()' on ScriptP1:ssä, ja sitä kutsutaan pääskriptissä. Tätä toimintoa kutsutaan ja komentosarja tulostaa 'Called from the ScriptP2'. ilmaisemaan, että funktiokutsu on suoritettu. Tämä tapahtumakulku osoittaa, että ScriptP1:ssä määritetty toiminto oli käytettävissä ja suoritettu onnistuneesti käynnissä olevan komentosarjan yhteydessä, joka on tunnistettu ScriptP2:ksi.

Kun ScriptP1:n tuontikäsky ajettiin ScriptP2:n sisällä, muuttujan __name__ arvo oli ScriptP1 (moduulin nimi); mutta koska ScriptP2 oli ensimmäinen suoritettu komentosarja, sen arvo on nyt __main__.

Kohteen __name__ arvon tulostaminen:

Tulostetaan muuttujan __name__ arvo jokaisessa suoritusvaiheessa, jotta ymmärrät sen paremmin.

Esimerkki: ScriptP1.py Python-komentosarjan lähdekoodi on alla:

 print('Value or the variable __name__ : ' + __name__) 

Lähtö:

 Value or the variable __name__ : __main__ 

Selitys:

Toimitettu Python-koodinäyte tulostaa muuttujan __name__ arvon, joka, kun komentosarja suoritetaan suoraan, evaluoituu 'main'. Se tarkoittaa, että kun komentosarja käynnistetään suoraan, koodilohko, joka tulee if __name__ == '__main__': -ehdon jälkeen, suoritetaan sen sijaan, että se tuodaan moduulina toiseen komentosarjaan. Tällaista käyttäytymistä käytetään usein erottamaan komentosarjan suorittaminen ensisijaisena sovelluksena ja sen tuominen toiseen komentosarjaan moduulina.

Esimerkki 2: Ja tässä on komentosarjan ScriptP2.py lähdekoodi:

 # importing the file ScriptP1.py import ScriptP1 print('Value or the variable __name__ : ' + __name__) 

Lähtö:

 Value or the variable __name__ : __main__ 

Selitys:

Mukana toimitettu Python-komentosarja käyttää tuontikäskyä tiedoston ScriptP1.py tuomiseen. ' Kun se suoritetaan, 'main' tulostetaan muuttujan __name__ arvoksi. Tämä tarkoittaa, että sen sijaan, että se tuodaan moduulina toiseen komentosarjaan, komentosarja suoritetaan suoraan ensisijaisena sovelluksena. Python-skriptejä suoritettaessa tämä on tavallista; komentosarjan suorituskonteksti näkyy muuttujassa __name__.

Yhteenveto:

Useimmissa ohjelmointikielissä päämenetelmää tai toimintoa käytetään yleensä ohjelman suorituspisteenä. Mutta entä Python? Python-ohjelman (komentosarjan) suorittaminen alkaa normaalisti riviltä nolla tai ohjelman sisennystasosta 0. Muuttujan __name__ luominen tapahtuu kuitenkin ennen Python-ohjelman suorittamista. Tätä muuttujaa voidaan käyttää Pythonin päämenetelmän korvaamiseen.