Šiuo metu vykdomo Python scenarijaus arba modulio pavadinimas saugomas specialiajame Python __name__ kintamajame. Python 3.0 pristatė kintamąjį __name__, kurio nėra Python 2. x. Dabartinis Python scenarijus arba modulio reikšmė __main__ priskiriama kintamajam __name__, kol jis vykdomas.
Ką reiškia _vardas_?
Python turi integruotą kintamąjį __name__, kuris saugo šiuo metu vykdomo scenarijaus arba modulio pavadinimą. Scenarijus arba modulio pavadinimas saugomas kintamajame __name__, nebent veikia dabartinis modulis. Tokiu atveju jam priskiriama reikšmė __main__.
Todėl, kai vykdomas Python scenarijus, jo __name__ kintamojo vertė visada turi būti __main__, jei jis importuojamas į kitą Python scenarijų. Jei ne, bus rodomas modulio pavadinimas.
Pavyzdys :
Norėdami tai geriau suprasti, naudokite pavyzdį. Padaryti Python scenarijus, vadinamas testing.py, ir pridėkite prie jo šį kodą:
# Code to define a function def anything(): print('Value of the __name__ : ', __name__) anything()
Išvestis:
listmazgas
Value of the __name__ : __main__
Paaiškinimas:
Scenarijus iš karto veikia kaip pagrindinė programa, kaip rodo išvestis „Vardo reikšmė: pagrindinis“. „Python“ scenarijaus kintamojo __name__ reikšmė automatiškai nustatoma į „__main__“, kai scenarijus vykdomas tiesiogiai. Ši išvestis patvirtina, kad scenarijus vykdomas tiesiogiai, o ne importuojamas kaip modulis į kitą scenarijų
Dabar sukurkime kitą Python scenarijų, vadinamą mains.py ir importuoti į jį ankstesnįjį.
Pavyzdys :
# importing testing.py import testing testing.anything()
Išvestis:
Value of the __name__ : testing
Paaiškinimas:
testavimas. Any() yra metodas, kuris paleidžiamas, kai scenarijus testing.py importuojamas į kitą Python scenarijų naudojant importavimo testavimą. Tokiu atveju modulio pavadinimas, šiuo atveju „testing“, yra nustatytas kaip testing.py kintamojo __name__ reikšmė, o ne „__main__“. Dėl šios priežasties bandymo rezultatas. Any() yra „__name__ vertė: testavimas“. Tai parodo, kaip scenarijaus vykdymas tiesiogiai, o ne importavimas kaip modulis paveikia kintamojo __name__ reikšmę.
Naudojant sąlygą, jei vardas == pagrindinis :
Mes naudojame jei teiginys ir sąlyga __name__ == __pagrindinis__ tai paskelbti tam tikras Python kodas turėtų būti tik atliekama, kai scenarijus paleidžiamas tiesiogiai .
romėniški skaitmenys 1100
Pavyzdys :
# importing testing.py import testing if __name__ == __main__: testing.anything()
Šiuo atveju esamo modulio arba scenarijaus gebėjimas veikti nepriklausomai nustatomas naudojant eilutę __main__. Norėdami Python interpretatoriui nurodyti, kad raktinis žodis kintamajame __name__ yra rezervuotas arba specialus, abiejose termino pusėse yra du pabraukimai.
bharti jha
Python vardo kodo pavyzdys:
Kaip minėta anksčiau, kai paleidžiame kodo failą, kodas vykdomas tiesiogiai – jis net neimportuojamas į kitą failą – ir dėl to kintamojo __name__ reikšmė pasikeičia į __main__.
# 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.')
Išvestis:
It is a function in the ScriptP1. Called from the ScriptP1.
Paaiškinimas:
Funkcija any() nurodyta scenarijuje ScriptP1 yra vykdoma tiesiogiai kaip pagrindinė programa, kaip rodo išvestis „Tai yra ScriptP1 funkcija“. po kurio seka „Pašaukta iš scenarijausP1“. Kai scenarijus paleidžiamas tiesiogiai Python, kintamasis __name__ nustatomas į '__main__'; vadinasi, sąlyga if __name__=='__main__': įvertinama kaip True, iškviesdama funkciją any(). Toliau pateikiamas spausdinimo teiginys patvirtina, kad scenarijus iš tikrųjų vykdomas tiesiogiai.
Dabar sukurkime naują Python scenarijaus failą pavadinimu ScriptP2.py, importuokime į jį ScriptP1.py ir pabandykite ScriptP1 metodą iškviesti bet ką ().
Kodas: The ScriptP2.py kodas pateiktas čia:
import ScriptP1 if __name__=='__main__': ScriptP1.anything() print('Called from the ScriptP2.')
Išvestis:
powershell vs bash
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.
Paaiškinimas:
Pateiktas Python scenarijus parodo, kaip importuoti 'ScriptP1' modulį į aktyvų scenarijų. Metodas „anything()“ yra „ScriptP1“ ir jis vadinamas pagrindiniame scenarijuje. Ši funkcija iškviečiama, o scenarijus išveda „Called from the ScriptP2“. nurodyti, kad funkcijos iškvietimas baigtas. Šis įvykių srautas rodo, kad „ScriptP1“ nurodyta funkcija buvo pasiekiama ir sėkmingai atlikta scenarijaus, kuris identifikuojamas kaip „ScriptP2“, kontekste, kuris dabar vykdomas.
Kai ScriptP1 importavimo sakinys buvo paleistas ScriptP2 viduje, kintamasis __name__ turėjo reikšmę ScriptP1 (modulio pavadinimas); bet kadangi ScriptP2 buvo pirmasis paleistas scenarijus, dabar jis turės reikšmę __main__.
__name__ vertės spausdinimas:
Kiekviename vykdymo etape išspausdinkime kintamojo __name__ reikšmę, kad padėtume geriau ją suprasti.
Pavyzdys : ScriptP1.py Python scenarijaus šaltinio kodas pateikiamas toliau:
wumpus pasaulis
print('Value or the variable __name__ : ' + __name__)
Išvestis:
Value or the variable __name__ : __main__
Paaiškinimas:
Pateiktas Python kodo pavyzdys išveda kintamojo __name__ reikšmę, kuri, kai scenarijus paleidžiamas tiesiogiai, įvertinama kaip „main“. Tai reiškia, kad kai scenarijus paleidžiamas tiesiogiai, kodo blokas, esantis po if __name__ == '__main__': sąlygos, bus paleistas, o ne importuojamas kaip modulis į kitą scenarijų. Toks elgesys dažnai naudojamas norint atskirti scenarijaus vykdymą kaip pagrindinę programą ir jo importavimą į kitą scenarijų kaip modulį.
2 pavyzdys: Ir čia yra scenarijaus ScriptP2.py šaltinio kodas:
# importing the file ScriptP1.py import ScriptP1 print('Value or the variable __name__ : ' + __name__)
Išvestis:
Value or the variable __name__ : __main__
Paaiškinimas:
Pateiktas Python scenarijus naudoja importavimo teiginį, kad importuotų failą „ScriptP1.py. Kai jis vykdomas, „main“ išspausdinama kaip kintamojo __name__ reikšmė. Tai reiškia, kad užuot importuotas kaip modulis į kitą scenarijų, scenarijus vykdomas tiesiogiai kaip pagrindinė programa. Vykdant Python scenarijus, tai yra įprastas elgesys; scenarijaus vykdymo kontekstas atsispindi kintamajame __name__.
Santrauka:
Daugumoje programavimo kalbų pagrindinis metodas arba funkcija paprastai naudojami kaip bet kurios programos vykdymo taškas. Bet kaip su Python? Python programos (scenarijaus) vykdymas paprastai prasideda nuo nulio eilutės arba programos įtraukos lygio 0. Tačiau kintamasis __name__ sukuriamas prieš paleidžiant Python programą. Šis kintamasis gali būti naudojamas pagrindiniam Python metodui pakeisti.