Python-Module

Ein Python-Modul ist eine Python-Datei mit der Endung .py, die Python-Objektdefinitionen und Python-Anweisungen enthält.

Module ermöglichen es Ihnen, Ihre Python-Codeabschnitte logisch zu organisieren.

Die Zuordnung von zusammengehörigem Code zu einem Modul macht Ihren Code besser nutzbar und leichter verständlich.

Module können Funktionen, Klassen und Variablen definieren und auch ausführbaren Code enthalten.

Beispiel

Das Folgende ist ein einfaches Modul support.py:

Modul support.py:

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

import-Anweisung

Module importieren

Sobald ein Modul definiert ist, können wir die import-Anweisung verwenden, um das Modul zu importieren. Die Syntax lautet wie folgt:

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

Um beispielsweise auf das Modul math zu verweisen, können Sie ganz am Anfang der Datei Folgendes verwenden:import mathum es zu importieren. Wenn Sie Funktionen im Modul math aufrufen, müssen Sie es wie folgt referenzieren:

Module name.function name

Wenn der Interpreter auf eine import-Anweisung stößt, wird das Modul importiert, sofern es sich im aktuellen Suchpfad befindet.

Der Suchpfad ist eine Liste aller Verzeichnisse, die der Interpreter der Reihe nach durchsucht. Wenn Sie das Modul support.py importieren möchten, müssen Sie den Befehl an den Anfang des Skripts setzen:

Code der Datei test.py:

#!/usr/bin/python # -*- coding: UTF-8 -*- # Modul importieren import support # Jetzt können Sie die im Modul enthaltenen Funktionen aufrufen support.print_func("Beispiel")

Die Ausgabe des obigen Beispiels ist:

Hello : Example

Ein Modul wird nur einmal importiert, egal wie oft Sie import ausführen. Dadurch wird verhindert, dass das importierte Modul immer wieder ausgeführt wird.



from…import-Anweisung

Die from-Anweisung von Python ermöglicht es Ihnen, einen bestimmten Teil aus einem Modul in den aktuellen Namensraum zu importieren. Die Syntax lautet wie folgt:

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

Um beispielsweise die Funktion fibonacci aus dem Modul fib zu importieren, verwenden Sie die folgende Anweisung:

from fib import fibonacci

Diese Anweisung importiert nicht das gesamte Modul fib in den aktuellen Namensraum; sie importiert nur die Funktion fibonacci aus fib in die globale Symboltabelle des Moduls, das diese Anweisung ausführt.



from…import *-Anweisung

Es ist auch möglich, alle Inhalte eines Moduls in den aktuellen Namensraum zu importieren. Verwenden Sie einfach die folgende Deklaration:

from modname import *

Dies bietet eine einfache Möglichkeit, alle Elemente aus einem Modul zu importieren. Diese Deklaration sollte jedoch nicht übermäßig verwendet werden.

Wenn wir beispielsweise alles aus dem Modul math auf einmal importieren möchten, lautet die Anweisung wie folgt:

from math import *

Suchpfad

Wenn Sie ein Modul importieren, sucht der Python-Interpreter den Speicherort des Moduls in der folgenden Reihenfolge:

  • 1. Aktuelles Verzeichnis
  • 2. Wenn es sich nicht im aktuellen Verzeichnis befindet, durchsucht Python jedes Verzeichnis, das in der Shell-Variablen PYTHONPATH aufgeführt ist.
  • 3. Wenn es nirgends gefunden werden kann, prüft Python den Standardpfad. Unter UNIX ist der Standardpfad im Allgemeinen /usr/local/lib/python/.

Der Modul-Suchpfad ist in der Variablen sys.path des Systemmoduls gespeichert. Diese Variable enthält das aktuelle Verzeichnis, PYTHONPATH und die durch den Installationsprozess bestimmten Standardverzeichnisse.



PYTHONPATH-Variable

Als Umgebungsvariable besteht PYTHONPATH aus vielen Verzeichnissen, die in einer Liste enthalten sind. Die Syntax von PYTHONPATH ist dieselbe wie die der Shell-Variable PATH.

Auf Windows-Systemen sieht ein typischer PYTHONPATH wie folgt aus:

set PYTHONPATH=c:\python27\lib;

Auf UNIX-Systemen sieht ein typischer PYTHONPATH wie folgt aus:

set PYTHONPATH=/usr/local/lib/python


Namensräume und Gültigkeitsbereich

Eine Variable ist ein Name (Bezeichner), dem ein passendes Objekt zugeordnet ist. Ein Namensraum ist ein Wörterbuch, das Variablennamen (Schlüssel) und die ihnen entsprechenden Objekte (Werte) enthält.

Ein Python-Ausdruck kann auf Variablen sowohl im lokalen Namensraum als auch im globalen Namensraum zugreifen. Wenn eine lokale Variable und eine globale Variable denselben Namen haben, überschreibt die lokale Variable die globale Variable.

Jede Funktion hat ihren eigenen Namensraum. Die Gültigkeitsregeln für Klassenmethoden sind dieselben wie für reguläre Funktionen.

Python errät intelligent, ob eine Variable lokal oder global ist; es nimmt an, dass jede Variable, der innerhalb einer Funktion ein Wert zugewiesen wird, lokal ist.

Wenn Sie daher einer globalen Variablen innerhalb einer Funktion einen Wert zuweisen möchten, müssen Sie die global-Anweisung verwenden.

Der Ausdruck global VarName teilt Python mit, dass VarName eine globale Variable ist, sodass Python diese Variable nicht im lokalen Namensraum sucht.

Zum Beispiel definieren wir eine Variable Money im globalen Namensraum. Dann weisen wir Money innerhalb einer Funktion einen Wert zu, und Python nimmt an, dass Money eine lokale Variable ist. Da wir jedoch keine lokale Variable Money deklariert haben, bevor wir darauf zugreifen, tritt ein UnboundLocalError auf. Das Entfernen des Kommentarsymbols vor der global-Anweisung kann dieses Problem lösen.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
Money = 2000
def AddMoney():
   # 想改正代码就取消以下注释:
   # global Money
   Money = Money + 1
 
print Money
AddMoney()
print Money


dir()-Funktion

Die Funktion dir() gibt eine sortierte Liste von Zeichenketten zurück, die die in einem Modul definierten Namen enthält.

Die zurückgegebene Liste enthält alle in einem Modul definierten Module, Variablen und Funktionen. Hier ist ein einfaches Beispiel:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 导入内置math模块
import math
 
content = dir(math)
 
print content;

Die Ausgabe des obigen Beispiels ist:

['__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 verweist die spezielle Zeichenkettenvariable __name__ auf den Namen des Moduls und __file__ auf den Importdateinamen des Moduls.



Die Funktionen globals() und locals()

Je nachdem, wo sie aufgerufen werden, können die Funktionen globals() und locals() verwendet werden, um Namen in den globalen und lokalen Namensräumen zurückzugeben.

Wenn locals() innerhalb einer Funktion aufgerufen wird, gibt sie alle Namen zurück, auf die in dieser Funktion zugegriffen werden kann.

Wenn globals() innerhalb einer Funktion aufgerufen wird, gibt sie alle globalen Namen zurück, auf die in dieser Funktion zugegriffen werden kann.

Der Rückgabetyp beider Funktionen ist ein Dictionary. Daher können die Namen mit der Funktion keys() abgerufen werden.



Die Funktion reload()

Wenn ein Modul in ein Skript importiert wird, wird der Code im Top-Level-Teil des Moduls nur einmal ausgeführt.

Wenn Sie daher den Top-Level-Code in einem Modul erneut ausführen möchten, können Sie die Funktion reload() verwenden. Diese Funktion importiert ein zuvor importiertes Modul erneut. Die Syntax lautet wie folgt:

reload(module_name)

Hier sollte module_name direkt der Name des Moduls sein, keine Zeichenkette. Zum Beispiel, um das Modul hello neu zu laden:

reload(hello)


Pakete in Python

Ein Paket ist eine hierarchische Dateiverzeichnisstruktur, die eine Python-Anwendungsumgebung definiert, die sich aus Modulen, Unterpaketen und Unterpaketen in Unterpaketen usw. zusammensetzt.

Einfach gesagt, ein Paket ist ein Ordner, aber der Ordner muss eine __init__.py-Datei enthalten, und der Inhalt dieser Datei kann leer sein.__init__.pySie wird verwendet, um zu kennzeichnen, dass der aktuelle Ordner ein Paket ist.

Betrachten Sie einpackage_exampleunter dem Verzeichnisexample1.py、example2.py、__init__.py Datei, test.py ist der Code zum Testen des Paketaufrufs, die Verzeichnisstruktur ist wie folgt:

test.py
package_example
|-- __init__.py
|-- example1.py
|-- example2.py
Der Quellcode lautet wie folgt:

package_example/example1.py

#!/usr/bin/python # -*- coding: UTF-8 -*- def example1(): print "Ich bin in example1"

package_example/example2.py

#!/usr/bin/python # -*- coding: UTF-8 -*- def example2(): print "Ich bin in example2"

Erstellen Sie nun unter dem Verzeichnispackage_exampledie Datei__init__.py:

package_example/__init__.py

#!/usr/bin/python # -*- coding: UTF-8 -*- if __name__ == '__main__': print 'als Hauptprogramm ausführen' else: print 'Initialisierung von package_example'

Dann erstellen wirpackage_example im Verzeichnis derselben Ebeneund erstellen unten test.py, umpackage_examplePaket aufzurufen

test.py

#!/usr/bin/python # -*- coding: UTF-8 -*- # Phone-Paket importieren from package_example.example1 import example1 from package_example.example2 import example2 example1() example2()

Die Ausgabe des obigen Beispiels ist:

package_example 初始化
I'm in example1
I'm in example2

Wie oben haben wir zur Veranschaulichung nur eine Funktion in jede Datei gelegt, aber tatsächlich können Sie viele Funktionen einfügen. Sie können in diesen Dateien auch Python-Klassen definieren und dann ein Paket für diese Klassen erstellen.

Weitere Erweiterungen