Python:从.py文件导入函数,包含所需的模块

时间:2018-05-22 14:37:48

标签: python function module

我正在尝试做一些相当简单的事情。我想从.py文件导入一个函数,但是使用在我的主脚本中导入的模块。例如,存储以下函数

./文件/ sinner.py

def sinner(x):
  y = mt.sin(x)
  return y

然后我想使用数学作为mt

来运行罪人
from sinner import sinner
import math as mt
sinner(10)

这并不奇怪地抛出错误

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-50006877ce3e> in <module>()
      2 import math as mt
      3 
----> 4 sinner(10)

/media/ssd/Lodging_Classifier/sinner.py in sinner(x)
      1 import math as mt
----> 2 
      3 def sinner(x):
      4   y = mt.sin(x)
      5   return y

NameError: global name 'mt' is not defined

我知道如何在R中处理这个,但不是在Python中。我错过了什么?

3 个答案:

答案 0 :(得分:3)

sinner.py命名空间中不存在数学模块。与R不同,导入的模块或包不会跨越全局命名空间。您需要在math文件中导入sinner.py

import math as mt

def sinner(x):
  y = mt.sin(x)
  return y

或者(我真的不知道你为什么要这样做),你可以将模块作为arg传递给sinner函数:

def sinner(mt, x):
  y = mt.sin(x)
  return y

然后你可以传递实现sin函数的不同模块:

from .sinner import sinner
import math as mt
import numpy as np
sinner(mt, 10)
sinner(np, 10)

答案 1 :(得分:2)

您需要在sinner.py中导入数学。它将导入包含文件中所有依赖项的函数。如果它不存在于文件中的依赖项将无效。

sinner.py

import math as mt

def sinner(x):
  y = mt.sin(x)
  return y

然后在你的另一个档案......

from sinner import sinner

答案 2 :(得分:0)

您还可以将mt作为参数传递给sinner

def sinner(x, mt): code