Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python - Modules

Vorige paginaVolgende pagina

Met een module kunt u uw Python-code logisch ordenen. Door gerelateerde code in een module te groeperen, wordt de code gemakkelijker te begrijpen en te gebruiken. Een module is een Python-object met willekeurig benoemde attributen die u kunt binden en waarnaar u kunt verwijzen.

Simpel gezegd, een module is een bestand dat bestaat uit Python-code. Een module kan functies, klassen en variabelen definiëren. Een module kan ook uitvoerbare code bevatten.

Voorbeeld

De Python-code voor een module met de naam aname bevindt zich normaal gesproken in een bestand met de naam aname.py . Hier is een voorbeeld van een eenvoudige module, support.py

def print_func( par ):
   print "Hello : ", par
   return

De import Verklaring

U kunt elk Python-bronbestand als module gebruiken door een importinstructie uit te voeren in een ander Python-bronbestand. De import heeft de volgende syntaxis −

import module1[, module2[,... moduleN]

Wanneer de interpreter een importinstructie tegenkomt, importeert hij de module als de module aanwezig is in het zoekpad. Een zoekpad is een lijst met mappen die de interpreter doorzoekt voordat een module wordt geïmporteerd. Om bijvoorbeeld de module support.py te importeren, moet u de volgende opdracht bovenaan het script plaatsen −

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

Wanneer de bovenstaande code wordt uitgevoerd, levert dit het volgende resultaat op −

Hello : Zara

Een module wordt slechts één keer geladen, ongeacht het aantal keren dat deze is geïmporteerd. Dit voorkomt dat de uitvoering van de module steeds opnieuw gebeurt als er meerdere importen plaatsvinden.

De van...import Verklaring

Python's van statement kunt u specifieke attributen uit een module importeren in de huidige naamruimte. De van...import heeft de volgende syntaxis −

from modname import name1[, name2[, ... nameN]]

Om bijvoorbeeld de functie fibonacci uit de module fib te importeren, gebruikt u de volgende instructie −

from fib import fibonacci

Deze instructie importeert niet de volledige module-fib in de huidige naamruimte; het introduceert gewoon het item fibonacci van de module fib in de globale symbooltabel van de importerende module.

De van...import * Verklaring

Het is ook mogelijk om alle namen uit een module in de huidige naamruimte te importeren met behulp van de volgende importinstructie −

from modname import *

Dit biedt een gemakkelijke manier om alle items van een module in de huidige naamruimte te importeren; deze verklaring moet echter met mate worden gebruikt.

Modules lokaliseren

Wanneer u een module importeert, zoekt de Python-interpreter naar de module in de volgende reeksen −

  • De huidige map.

  • Als de module niet wordt gevonden, doorzoekt Python vervolgens elke map in de shellvariabele PYTHONPATH.

  • Als al het andere faalt, controleert Python het standaardpad. Op UNIX is dit standaardpad normaal gesproken /usr/local/lib/python/.

Het zoekpad van de module wordt opgeslagen in de systeemmodule sys als het sys.path variabel. De variabele sys.path bevat de huidige map, PYTHONPATH, en de installatieafhankelijke standaardinstelling.

Het PYTHONPATH Variabele

De PYTHONPATH is een omgevingsvariabele, bestaande uit een lijst met mappen. De syntaxis van PYTHONPATH is dezelfde als die van de shell-variabele PATH.

Hier is een typische PYTHONPATH van een Windows-systeem −

set PYTHONPATH = c:\python20\lib;

En hier is een typisch PYTHONPATH van een UNIX-systeem −

set PYTHONPATH = /usr/local/lib/python

Naamruimten en bereik

Variabelen zijn namen (identifiers) die verwijzen naar objecten. Een naamruimte is een woordenboek van variabelenamen (sleutels) en hun corresponderende objecten (waarden).

Een Python-statement heeft toegang tot variabelen in een lokale naamruimte en in de algemene naamruimte . Als een lokale en een globale variabele dezelfde naam hebben, overschaduwt de lokale variabele de globale variabele.

Elke functie heeft zijn eigen lokale naamruimte. Klassemethoden volgen dezelfde scopingregel als gewone functies.

Python maakt gefundeerde gissingen over de vraag of variabelen lokaal of globaal zijn. Het gaat ervan uit dat elke variabele waaraan een waarde in een functie is toegewezen, lokaal is.

Om een ​​waarde toe te kennen aan een globale variabele binnen een functie, moet je daarom eerst het globale statement gebruiken.

De verklaring global VarName vertelt Python dat VarName een globale variabele is. Python stopt met zoeken in de lokale naamruimte naar de variabele.

We definiëren bijvoorbeeld een variabele Geld in de globale naamruimte. Binnen de functie Geld , wij wijzen Geld . toe een waarde, daarom gaat Python uit van Geld als lokale variabele. We hebben echter toegang gekregen tot de waarde van de lokale variabele Geld voordat u het instelt, dus een UnboundLocalError is het resultaat. Het verwijderen van commentaar bij de algemene instructie lost het probleem op.

#!/usr/bin/python

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

De dir( ) Functie

De ingebouwde functie dir() retourneert een gesorteerde lijst met tekenreeksen die de namen bevatten die door een module zijn gedefinieerd.

De lijst bevat de namen van alle modules, variabelen en functies die in een module zijn gedefinieerd. Hieronder volgt een eenvoudig voorbeeld −

Live demo
#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)
print content

Wanneer de bovenstaande code wordt uitgevoerd, levert dit het volgende resultaat op −

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

Hier de speciale tekenreeksvariabele __name__ is de naam van de module, en __file__ is de bestandsnaam van waaruit de module is geladen.

De globals() en locals() Functies

De globals() en locals() functies kunnen worden gebruikt om de namen in de globale en lokale naamruimten te retourneren, afhankelijk van de locatie van waaruit ze worden aangeroepen.

Als locals() wordt aangeroepen vanuit een functie, retourneert het alle namen die lokaal toegankelijk zijn vanuit die functie.

Als globals() wordt aangeroepen vanuit een functie, worden alle namen geretourneerd die globaal toegankelijk zijn vanuit die functie.

Het retourtype van beide functies is woordenboek. Daarom kunnen namen worden geëxtraheerd met de functie keys().

De reload() Functie

Wanneer de module in een script wordt geïmporteerd, wordt de code in het bovenste gedeelte van een module slechts één keer uitgevoerd.

Daarom, als u de code op het hoogste niveau in een module opnieuw wilt uitvoeren, kunt u de reload() gebruiken functie. De functie reload() importeert een eerder geïmporteerde module opnieuw. De syntaxis van de functie reload() is deze −

reload(module_name)

Hier, module_name is de naam van de module die u opnieuw wilt laden en niet de tekenreeks die de modulenaam bevat. Om bijvoorbeeld hallo . opnieuw te laden module, doe dan het volgende −

reload(hello)

Pakketten in Python

Een pakket is een hiërarchische bestandsdirectorystructuur die een enkele Python-toepassingsomgeving definieert die bestaat uit modules en subpakketten en subsubpakketten, enzovoort.

Overweeg een bestand Pots.py beschikbaar in Telefoon map. Dit bestand heeft de volgende regel broncode −

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

Op dezelfde manier hebben we nog twee bestanden met verschillende functies met dezelfde naam als hierboven −

  • Telefoon/Isdn.py bestand met functie Isdn()

  • Telefoon/G3.py bestand met functie G3()

Maak nu nog een bestand __init__.py in Telefoon map −

  • Telefoon/__init__.py

Om al uw functies beschikbaar te maken wanneer u Phone hebt geïmporteerd, moet u als volgt expliciete importinstructies in __init__.py plaatsen −

from Pots import Pots
from Isdn import Isdn
from G3 import G3

Nadat je deze regels aan __init__.py hebt toegevoegd, heb je al deze klassen beschikbaar wanneer je het telefoonpakket importeert.

#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

Wanneer de bovenstaande code wordt uitgevoerd, levert dit het volgende resultaat op −

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

In het bovenstaande voorbeeld hebben we een voorbeeld genomen van een enkele functie in elk bestand, maar u kunt meerdere functies in uw bestanden behouden. Je kunt ook verschillende Python-klassen in die bestanden definiëren en dan kun je je pakketten van die klassen maken.


Python

  1. Python-gegevenstypen
  2. Python invoer, uitvoer en import
  3. Python-operators
  4. Python-functieargumenten
  5. Python-modules
  6. Python-woordenboek
  7. Python-iterators
  8. Python-sluitingen
  9. Python datetime
  10. Python-tijdmodule
  11. Python-slaap()