Wie machen die weltweiten Importe von einer Funktion?
Befürchte ich, dass dies ist eine schmutzige Art und Weise zu nähern, das problem aber...
lassen Sie uns sagen, dass ich möchte, um einige Importe in Python, basierend auf bestimmten Bedingungen.
Aus diesem Grund möchte ich eine Funktion schreiben:
def conditional_import_modules(test):
if test == 'foo':
import onemodule, anothermodule
elif test == 'bar':
import thirdmodule, and_another_module
else:
import all_the_other_modules
Nun, wie kann ich die importierten Module, die weltweit verfügbar?
Beispiel:
conditional_import_modules(test='bar')
thirdmodule.myfunction()
- Können Sie erklären, den genauen Anwendungsfall für diese?
- scheint, wie Sie konnte einfach importieren Sie Sie alle, dann verwenden Sie nur die Module, die Sie benötigen
- Ich nehme an, du meintest == in Ihren Bedingungen
- Ich habe nicht einen echten use-case (das heißt, ich kann lösen Sie in einer anderen Art und Weise), aber diese Frage kam in meinem Kopf, während ich schrieb einige code zu importieren, Blaupausen basiert auf einer Konfigurationsdatei, die im Kolben web-Anwendung. Ich dachte an eine Funktion schreiben, um die Importe, und die anderen, diese zu registrieren.
- Ops... die Finger sind schneller als das Gehirn... (korrigiert)
- ein real-world use case: ein python-app, die ist Optional in der Lage, zeichnen ein Diagramm mit
matplotlib.pyplot
. Unbedingt importieren, das Modul kann auf einigen Systemen fehlschlagen, weil es nicht installiert ist, oder wenn es installiert ist, lädt alle installiert backends, darunter auch einige, die vielleicht X oder tkinter, was wiederum fehlt, was zu einem Abbruch aufgrund einer ausgelösten Ausnahme. So macht es Sinn, nur importieren, wenn der Benutzer eigentlich fordert das erstellen einer plot.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Importierten Module sind nur Variablen - Namen gebunden, um einige Werte. Also alles, was Sie brauchen, ist, um Sie zu importieren, und machen Sie global mit
global
Stichwort.Beispiel:
global ab
sowie vgl. meine AntwortKönnen Sie die Importe global innerhalb einer Funktion wie folgt:
importlib
bietet einen wrapper für__import__
imimport_module
Funktion.Haben, könnten Sie diese Funktion zurückgeben, die Namen der Module, die Sie importieren möchten, und verwenden Sie dann
Können Sie die integrierte Funktion
__import__
bedingt zu importieren, die ein Modul mit globalen Gültigkeitsbereich.Importieren einer top-level-Modul (think:
import foo
):Importieren aus einer Hierarchie (denke:
import foo.bar
):Importieren aus einer Hierarchie und alias (denke:
import foo.bar as bar
):Ich wie @badzil Ansatz.
So etwas, das ist traditionell in ein Klassenmodul:
Verwandelt sich in einen globalen Gültigkeitsbereich:
Kann einige Fehler haben, die ich überprüfen und zu aktualisieren. Das Letzte Beispiel könnte auch einen alias, das wäre ein weiterer "shortname" oder einen hack wie "importr|aliasimportr"
Ich habe gerade das ähnliche problem, hier ist meine Lösung:
dann irgendwo im code:
Ich wie @rafał grabie Ansatz. Als es noch Unterstützung für das importieren von allen.
also
from os import *
(Obwohl es schlechte Praxis ist XD )
Nicht erlaubt zu kommentieren, aber hier ist ein python-version 2.7.
Ebenfalls entfernt die Notwendigkeit zum Aufruf der Funktion am Ende.