你的意圖是錯的Python的語法。因爲在你的代碼中,the variables range are scoped within the function。因此,當您進行導入時,您會在econometrics
函數範圍內創建一堆變量,因此您的變量只能在該函數中達到。
那麼,讓我們來簡單的例子:
>>> def foobar():
... a = 1
... b = 2
...
>>> foobar()
>>> a
NameError: name 'a' is not defined
這裏a
和b
只有foobar
的功能範圍內的存在,所以它是超出範圍的主要範圍。
做你想做什麼,你想要的方式,你應該聲明的變量作爲belonging to the global
scope:
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()
所以要回了foobar
例如:
>>> def foobar():
... global a, b
... a = 1
... b = 2
...
>>> foobar()
>>> a
1
>>> b
2
雖然,我不太喜歡那種做事的方式,因爲它的做事含蓄。考慮到你有一個Python模塊只定義,人們閱讀下面的代碼的計量經濟學功能:
from econometrics import econometrics
econometrics()
plt.something()
不會有必要明白,plt
已可通過econometrics
函數調用。添加評論將有所幫助,但仍然是不必要的額外步驟。
一般來說,doing globals within any language is wrong,這裏面的大部分總是時有更好的方式來做到這一點。內"Zen of python",更說明「明確優於隱式」,所以我相信一個更優雅的方式是創建一個模塊,做進口,然後你導入你的模塊需要的東西:
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
,並在你的代碼你然後導入只有你所需要的:
from econometrics import pd, plt
plt.something()
這將是更優雅的和明確的!然後,你只需要將該文件放在需要數學模塊的任何項目中,以便讓所有需要的心愛的模塊- 只有它們 - 可用於您的代碼!
然後爲一步,你可以定義你自己的Python模塊,with a full blown setup.py
,並與您的econometrics.py
文件是在econometrics
包目錄__init__.py
,到那麼它作爲一個Python包通過安裝:
python setup.py install
位於源代碼的根目錄。那麼你的任何代碼都可以使用econometrics
作爲python包。你甚至可以考慮在pypi上製作一個包裝!
HTH
事實上,模塊的工作就好了內部計量經濟學(),而不是外面的範圍。我奮鬥了同樣的工作,並決定創建我自己的工具箱模塊,以便我可以從tbx.acustics導入混響編碼,並從那裏獲得所有我想要的導入。 – krysopath