Module - un tutorial despre Python 3

În Python, puteți pune definițiile necesare într-un fișier și le puteți folosi în scripturi sau interactiv în interpret. Un astfel de fișier este numit modul. Definițiile din modul pot fi importate în alte module sau în modulul principal (o colecție de variabile care sunt accesate într-un script care rulează direct și în modul interactiv).







Acum puteți introduce interpretul Python și puteți importa acest modul cu următoarea comandă:

Această acțiune nu traduce numele definite în modulul funcțional în tabela simbolică curentă, ci numai numele modulului fibo. Folosind numele modulului, puteți accesa următoarele funcții:

Această tehnică este adesea folosită pentru a oferi o interfață prietenoasă cu modulul sau pentru testare (execuția modulului ca scenariu rulează un set de teste).

Căutarea căii de module

Dacă importați un modul numit spam. interpretul caută un fișier numit spam.py în directorul curent și apoi în directoarele specificate în variabila de mediu PYTHONPATH. Are aceeași sintaxă ca și variabila shell PATH. care, la rândul său, este o enumerare a cataloagelor. Atunci când variabila PYTHONPATH nu este setată sau fișierul nu este găsit în locațiile descrise în el, căutarea continuă pe calea implicită, în funcție de cea specificată în timpul instalării; pe Unix este de obicei .: / usr / local / lib / python.

De fapt, modulele sunt căutate în lista directoarelor din variabila sys.path. care de obicei conține: directorul în care este localizat scriptul de la intrare (sau directorul curent), PYTHONPATH și implicit pentru directorul specificat în timpul instalării. Acest lucru permite programelor din Python (care știu ce fac) să schimbe sau să înlocuiască calea de căutare a modulelor. Notă: deoarece directorul care conține scriptul pe care îl executați este și în calea de căutare, este important să nu existe script-uri cu numele modulului standard din acesta. În caz contrar, atunci când acest modul este importat, Python va încerca să încarce scriptul sub forma unui modul, care în majoritatea cazurilor va cauza o eroare. Pentru mai multe informații, consultați secțiunea Module standard.

"Compilate" fișierele Python

Interpretul Python utilizează o tehnică importantă pentru a accelera lansarea programului: dacă este în directorul în care fișierul este localizat cu un modul spam.py. există și un fișier spam.pyc. se presupune că acesta este deja compilat într-o versiune de cod byte ("byte-compiled") a modulului spam. În fișierul spam.pyc, timpul pentru schimbarea fișierului de versiune spam.py utilizat pentru a crea spam.pyc a fost reprimat. Dacă versiunile nu se potrivesc, fișierul .pyc este ignorat.

În cazul obișnuit, nu este necesar să faceți nimic pentru a crea fișierul spam.pyc. De fiecare dată când spam.py este compilat cu succes, se face o încercare de a scrie versiunea compilată la spam.pyc. Nu se consideră o eroare dacă încercarea nu reușește: dacă, din orice motiv, fișierul nu este scris complet, fișierul spam.pyc rezultat va fi considerat incorect și din acest motiv va fi ignorat în viitor. Conținutul fișierului spam.pyc este independent de platformă, astfel încât directorul modulului Python poate fi utilizat în paralel cu mașini de diferite arhitecturi.

Câteva sfaturi pentru experți:

Module standard

Python vine cu o bibliotecă de module standard, descrisă într-un document separat, Python Library Reference ("Biblioteca de referință"). Unele module sunt integrate în interpret. Acestea oferă acces la operații care nu fac parte din miezul lingvistic și sunt construite pentru o mai mare eficiență și acces la facilități esențiale ale sistemului de operare, cum ar fi apelurile de sistem. Un set de astfel de module este o alegere a setărilor care depinde de platforma utilizată. De exemplu, modulul winreg este disponibil numai în sistemele Windows. Un modul special merită mai multă atenție: modulul sys. încorporată în fiecare versiune a interpretului Python. Variabilele sys.ps1 și sys.ps2 definesc șirurile folosite ca instrucțiuni primare și secundare:







Aceste două variabile sunt definite numai pentru modul interactiv al interpretului.

Variabila sys.path este o listă de șiruri care definește calea către modulele interpretului. Este inițializată cu valoarea căii implicite luată din variabila de mediu PYTHONPATH. sau valoarea implicită implicită dacă PYTHONPATH nu este setat. Puteți schimba valoarea utilizând operațiile standard cu liste:

Funcția dir ()

Dir () funcția încorporată este folosită pentru a obține numele definite în modul. Returnează o listă ordonată de șiruri de caractere:

Din nou, submodul ecou este încărcat în acest fel. dar acum funcția sa echofilter () poate fi apelată direct:

Rețineți că atunci când utilizați expresia din pachetul de import, elementul. un element poate fi un submodul (sau un sub-pachet) al unui pachet sau orice alt nume definit într-un pachet - de exemplu, o funcție, o clasă sau o variabilă. Declarația de import verifică mai întâi dacă elementul este definit în pachet; dacă nu, o tratează ca un modul și încearcă să o încarce. Dacă nu o găsiți, este aruncată o excepție ImportError.

Dimpotrivă, când se utilizează sintaxa în stilul de import, elementul este un sub-element. Sub-element. toate elementele cu excepția ultimului trebuie să fie pachete; ultimul element poate fi un modul sau un pachet, dar nu poate fi o clasă, o funcție sau o variabilă definită în elementul anterior.

Import * din pachet

Ce se întâmplă atunci când un utilizator scrie de la sound.effects import *. În mod ideal, am speranța că în acest fel codul va intra în sistemul de fișiere și va găsi care submodule există în pachet, importându-le pe toate. Din păcate, această metodă nu funcționează foarte bine pe platformele Windows, deoarece sistemul de fișiere nu are întotdeauna informațiile corecte despre registrul de nume de fișiere. Pe aceste platforme, nu există nici un mod garantat de a ști dacă trebuie să importați fișierul ECHO.PY ca un modul ecou. Echo sau ECHO. (De exemplu, Windows 95 are prostul obicei de a afișa toate numele de fișiere cu litere majuscule.) Restricție DOS pe numele fișierului în formatul de 8 + 3 adaugă o problemă amuzantă asociată cu nume lungi de module.

Acest lucru va însemna că expresia de la sound.effects import * importă trei submodule numite din pachetul de sunet.

În cazul în care lista nu este definită __all__ operatorul de la Sound.Effects import * nu importă pachet toate submodule Sound.Effects în spațiul de nume curent: face doar sigur că pachetul Sound.Effects importate (probabil, efectuarea de cod de inițializare din __init__.py), și apoi importă toate denumirile definite în pachet. Această listă conține orice nume definite (și încărcate explicit de submodule) în __init__.py. De asemenea, conține toate submodulele încărcate explicit de declarațiile de import anterioare. Luați în considerare următorul cod:

În acest exemplu, modulele ecou și surround sunt importate în spațiul de nume curent, deoarece sunt definite în pachetul sound.effects la momentul executării instrucțiunii de la. de import. (Și aceasta funcționează și dacă este definit __all__).

Rețineți că, în general, importul * din modul nu este binevenit, deoarece rezultatul este adesea un cod greu de citit. Cu toate acestea, este normal să le folosiți în sesiuni interactive pentru a imprima mai puțin, iar anumite module sunt destinate să exporte numai acele nume care urmează anumite modele.

Amintiți-vă: nu este nimic în neregulă cu utilizarea definite_submodule din pachetul de import. De fapt, aceasta este intrarea recomandată, dacă nu aveți nevoie să utilizați un submodul cu același nume din diferite pachete atunci când importați modulul.

Legături în interiorul pachetului

Când pachetele sunt structurate în subpachete (de exemplu, în cazul unui pachet de sunet), pentru a vă referi la pachetele pentru copii, puteți utiliza importurile absolute. De exemplu, dacă modulul sound.filters.vocoder are nevoie de modulul ecou din pachetul sound.effects. ar trebui să utilizeze din sound.effects echo import.

De asemenea, puteți utiliza importurile relative utilizând formularul de import al declarației de import. din numele de import al modulului. Cu această metodă de import, simbolul punct este folosit pentru a descrie pachetele curente și părinte. De exemplu, pentru modulul surround, puteți scrie:

Rețineți că importul relativ se bazează pe numele modulului curent. Deoarece numele modulului principal este întotdeauna "__main__", modulele destinate a fi utilizate ca module principale ale unei aplicații în Python trebuie să utilizeze întotdeauna importuri absolute.

Pachete în mai multe directoare

Pachetele suportă încă un atribut special: __path__. Înainte de a executa fișierul __init__.py al acestui pachet, acesta este inițializat cu o listă care conține numele directorului în care este localizat acest fișier. Prin schimbarea variabilei, este posibil să influențezi căutarea modulelor și subpachetelor conținute în pachet.

Deși această caracteristică nu este necesară atât de des, ea poate fi utilizată pentru a extinde setul de module care sunt în pachet.







Articole similare

Trimiteți-le prietenilor: