numpy Python从不同的.py文件调用导入的函数,但导入的函数无法在主文件中看到其他导入的模块

wpx232ag  于 2023-06-23  发布在  Python
关注(0)|答案(2)|浏览(175)

我在另一个文件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'未定义
谢谢你!

laximzn5

laximzn51#

您可能会与C #include(或类似的东西)混淆。
您的代码在nhpp_next_arrival.py处使用了numpy.random,因此在其顶部应该有

import numpy as np

即使您在导入到该文件之前导入了它,当解释器看到

from nhpp import *

它不会将包导入该模块的命名空间。

bq9c1y66

bq9c1y662#

在将模块导入jupyter notebook后,我在名为“www.example.com”的模块中调用函数“add_datepart”时遇到了同样的问题structured.py。
我一开始在notebook中导入numpy为np,然后导入“structured.py”,然后调用“add_datepart”,出现错误

NameError: name 'np' is not defined.

解决方案:

在“www.example.com“的开头添加import numpy as npstructured.py,即您要导入的模块。

解释:

这一段是我想强调的。我们得到的NameError主要是由于解释器的名称搜索机制,LEGB规则。当在函数中遇到名称(np)时,解释器首先在局部作用域中查找,然后在**模块的全局作用域(“structured_modified.py”,或者在你的例子中是“nhpp.py“)**中查找,它不会在另一个模块或脚本的全局作用域(主文件或笔记本文件的全局作用域)中解析“np”。
from nbpp import *只在主文件的名称空间中绑定函数的名称,并不意味着函数可以使用主文件中的名称。因此,如果你想调用一个函数使用某个包,你需要确保这个包被导入到函数所在的模块中。

相关问题