我在另一个文件nhpp_next_arrival.py中定义了一个函数,其中包含一个函数。需要注意的是,我使用的是numpy包。
def nhpp_next_arrival(t,Lambda, h_lam):
# current starting time t
# rate handle h_lam
# Lambda a majorizing function/constant
U = np.random.uniform()
V = np.random.uniform()
t = t - np.log(U)/Lambda
while V > h_lam(t)/Lambda:
t = t - np.log(U)/Lambda
U = np.random.uniform()
V = np.random.uniform()
return t
我将此函数导入到另一个文件中,如下所示
import numpy as np
from nhpp import *
#Call nhpp_next_arrival
t_arrival = nhpp_next_arrival(t=t, Lambda=max_arrival, h_lam=h_arr_total)
然后我得到以下错误信息。
U = np.random.uniform()
名称错误:名称'np'未定义
谢谢你!
2条答案
按热度按时间laximzn51#
您可能会与C
#include
(或类似的东西)混淆。您的代码在
nhpp_next_arrival.py
处使用了numpy.random
,因此在其顶部应该有即使您在导入到该文件之前导入了它,当解释器看到
它不会将包导入该模块的命名空间。
bq9c1y662#
在将模块导入jupyter notebook后,我在名为“www.example.com”的模块中调用函数“add_datepart”时遇到了同样的问题structured.py。
我一开始在notebook中导入numpy为np,然后导入“structured.py”,然后调用“add_datepart”,出现错误
解决方案:
在“www.example.com“的开头添加
import numpy as np
structured.py,即您要导入的模块。解释:
这一段是我想强调的。我们得到的NameError主要是由于解释器的名称搜索机制,LEGB规则。当在函数中遇到名称(np)时,解释器首先在局部作用域中查找,然后在**模块的全局作用域(“structured_modified.py”,或者在你的例子中是“nhpp.py“)**中查找,它不会在另一个模块或脚本的全局作用域(主文件或笔记本文件的全局作用域)中解析“np”。
from nbpp import *
只在主文件的名称空间中绑定函数的名称,并不意味着函数可以使用主文件中的名称。因此,如果你想调用一个函数使用某个包,你需要确保这个包被导入到函数所在的模块中。