Wenn wir Python-Projekte entwickeln, schreiben wir oft einige Toolfunktionen. Um diese Toolfunktion in mehreren .py-Dateien im Projekt verwenden zu können, müssen Sie sie an mehreren Stellen importieren, was sehr mühsam ist.
Zum Beispiel das folgende Beispiel:
Verwenden Sie das clean_msg-Tool sowohl in A.py- als auch in C.py-Dateien . Funktion, dann müssen sie alle clean_msg aus util.py importieren. Das scheint natürlich.
Aber als ich mir heute den Quellcode von icecream/builtins.py[1] ansah, entdeckte ich plötzlich eine erweiterte Verwendung, die es uns ermöglicht, Tool-Funktionen genau wie die Druckfunktion von Python zu verwenden, nein müssen importiert, aber direkt verwendet werden.
Werfen wir zunächst einen Blick auf die Wirkung:
Bitte beachten Sie, dass A.py und C.py, I hat sie nicht importiert, clean_msg verwendet stattdessen diese Funktion direkt. Und es läuft völlig einwandfrei.
Das Schlüsselprinzip liegt in der Eingabedatei main.py, den 3 Zeilen, die ich eingerahmt habe:
import builtins from util import clean_msg setattr(builtins, 'clean_msg', clean_msg)
In Python befinden sich alle integrierten Funktionen oder Klassen im Modul „builtins“. , sodass es ohne Import direkt im Code verwendet werden kann. Jetzt müssen wir nur noch unsere benutzerdefinierte Toolfunktion im integrierten Modul registrieren, damit sie den gleichen Effekt wie die integrierte Funktion haben kann.
Wenn Sie eine Tool-Funktion als integrierte Funktion registrieren möchten, müssen Sie sie nur in die Eintragsdatei importieren und sie dann mit setattr als Attribut des integrierten Moduls festlegen. Der zweite Parameter ist der Name, wenn Sie ihn global aufrufen möchten, und der dritte Parameter ist die Tool-Funktion, die Sie registrieren müssen. Der Name kann sich vom Namen der Dienstprogrammfunktion unterscheiden, solange er keine vorhandene integrierte Funktion dupliziert.
Nach Abschluss der Registrierung kann diese Toolfunktion während der gesamten Laufzeit dieses Projekts direkt über den registrierten Namen in jeder .py-Datei aufgerufen werden, genau wie der Aufruf der integrierten Funktion.
[1] icecream/builtins.py: https://github.com/gruns/icecream/blob/master/icecream/builtins.py# 🎜 🎜#
Das obige ist der detaillierte Inhalt vonWie mache ich eine benutzerdefinierte Funktion in Python global verfügbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!