Ihre Absicht ist es in Python Grammatik falsch. Weil in Ihrem Code the variables range are scoped within the function. Wenn Sie also Ihre Importe ausführen, erstellen Sie eine Reihe von Variablen innerhalb des Funktionsbereichs econometrics
, und daher sind Ihre Variablen nur innerhalb dieser Funktion erreichbar. So
, lassen Sie uns ein einfacheres Beispiel nehmen:
>>> def foobar():
... a = 1
... b = 2
...
>>> foobar()
>>> a
NameError: name 'a' is not defined
hier a
und b
nur existieren innerhalb foobar
‚s Funktionsumfang, so dass es außerhalb des Gültigkeitsbereichs im Hauptbereich.
def econometrics():
global pd, np, smf, sm, plt
print("Econometrics is starting")
import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
import statsmodels.api as sm
import matplotlib.pyplot as plt
print("Econometrics is started")
econometrics()
Also, um wieder auf das foobar
Beispiel:
>>> def foobar():
... global a, b
... a = 1
... b = 2
...
>>> foobar()
>>> a
1
>>> b
2
Obwohl ich
zu tun, was Sie wollen, wie Sie es wollen, sollten Sie Ihre Variable als belonging to the global
scope erklären mag diese Art, Dinge zu tun, nicht wirklich, da es Dinge macht implizit.Erwägen Sie ein Python-Modul mit nur der Ökonometrie Funktion definiert, die Menschen den folgenden Code zu lesen:
from econometrics import econometrics
econometrics()
plt.something()
wäre nicht notwendig zu verstehen, dass plt
durch den econometrics
Funktionsaufruf zur Verfügung gestellt wurde. Hinzufügen eines Kommentars würde helfen, ist aber immer noch ein unnötiger zusätzlicher Schritt.
Im Allgemeinen doing globals within any language is wrong, und es gibt die meiste Zeit immer einen besseren Weg, es zu tun. Innerhalb der "Zen of python" wird festgestellt, dass "Explizite ist besser als implizit", so glaube ich, eine elegantere Möglichkeit wäre, ein Modul zu erstellen, das den Import ausführt, und dann importieren Sie, was Sie aus dem Modul benötigen:
econometrics.py:
import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
import statsmodels.api as sm
import matplotlib.pyplot as plt
und in Ihrem Code würden Sie dann nur importieren, was Sie brauchen:
from econometrics import pd, plt
plt.something()
, die viel eleganter und expliziter wäre! Dann müssten Sie diese Datei einfach in alle Projekte einfügen, in denen Sie Ihre Mathematikmodule benötigen, um alle Ihre geliebten Module zu haben, die benötigen - und nur sie - in Ihrem Code verfügbar sind!
Dann, als ein Schritt weiter, könnten Sie Ihr eigenes Python-Modul definieren, with a full blown setup.py
und mit Ihrer econometrics.py
Datei ein __init__.py
im econometrics
Paketverzeichnis zu sein, um sie dann als Python-Paket durch installiert haben:
python setup.py install
an der Wurzel Ihrer Quellen. Also kann jeder Code, den Sie ausarbeiten, econometrics
als Python-Paket verwenden. Sie könnten sogar darüber nachdenken, es zu einem Paket auf Pypi zu machen!
HTH
In der Tat funktionieren die Module innerhalb von econometrics() gut, aber nicht außerhalb ihres Geltungsbereichs. Ich habe mit der gleichen Arbeit gekämpft und mich entschieden, ein eigenes Toolbox-Modul zu erstellen, damit ich von tbx.acustics import reverb 'codiere und alle meine gewünschten Importe von dort bekomme. – krysopath