Python:如何从依赖于模块的另一个文件正确导入函数

时间:2016-06-09 20:03:29

标签: python

假设我有两个文件。第一个包含我编写的所有函数以及我通常从主文件中导入的函数:

# my_functions.py

def sqrt_product(a, b):
    from math import sqrt
    return sqrt(a*b)

def create_df(lst):
    from pandas import DataFrame as df
    return df(lst)

和我的主文件:

# main.py
from my_functions import sqrt_product, create_df

print(sqrt_product(3, 3))
print(create_df([1, 2, 3])

有更有效的方法导入此功能吗?我是否必须为我创建的每个功能导入每个模块?如果我在同一个文件中有多个函数依赖于同一个模块,那该怎么办?

4 个答案:

答案 0 :(得分:3)

这是怎么回事。

 import my_functions as repo

用法:

repo.sqrt_product(a, b)
repo.create_df(lst)

print(repo.sqrt_product(3, 3))
print(repo.create_df([1, 2, 3])

“repo”现在位于命名空间中。就像import pandas as pd一样,pd位于命名空间中。

# my_functions.py
from math   import sqrt
from pandas import DataFrame as df
#Or import pandas as pd 

def sqrt_product(a, b):
    return sqrt(a*b)

def create_df(lst):
    return df(lst)
    #return pd.DataFrame(lst)

答案 1 :(得分:1)

您可以将from pandas import DataFrame(可选择as df)移至my_functions.py的顶部,然后重新定义create_df即可:

def create_df(lst):
    return DataFrame(lst)   # or df(lst) if you used as

导入时,create_df功能仍然有效,而无需您从pandas导入任何内容。它将被导入所需的所有东西。

这不仅适用于导入的依赖项。

x = 5
def y():
    return x

如果您去其他地方而import y,您会发现y()会返回5,无论您是否导入x。无论功能对象需要做什么工作,它都随身携带。这包括何时将其导入另一个模块。

答案 2 :(得分:0)

你也可以这样做。

# main.py
from my_functions import *

print(sqrt_product(3, 3))
print(create_df([1, 2, 3])

答案 3 :(得分:-1)

有几种方法可以做到这一点。

  1. 从当前目录导入文件。

    • 确保您要导入的文件的文件名中没有任何空格或短划线。 (例如: thing_to_import_from.py ,而非导入from.py 。)
    • 确保两个文件都在同一目录中。

      导入文件和功能如下:

      from thing_to_import_from import function_to_import1, function_to_import2
      
  2. 从其他目录导入文件。

    • 如果文件位于同一目录中的文件夹或子文件夹中,并且路径不包含空格,则可以像这样导入:

      from folder/subfolder/thing_folder/thing_to_import_from import function_to_import
      
    • 否则,添加python sys.path的路径,然后像以前一样导入。

      import sys
      sys.path.insert(0, "/folder/subfolder/thing folder")
      from thing_to_import_from import function_to_import
      
  3. 将文件转换为python模块。

    • 如果您打算长时间使用多个程序的文件,则只应执行此操作。不要破坏你的Lib文件夹!

      1. 使用所需的库名称在Lib文件夹中创建一个文件夹。 (例如,Windows上用于Python2.7的Lib的默认位置是 C:\ Python27 \ Lib 。)
      2. 放置包含要在此文件夹中导入的功能的脚本。
      3. 在此文件夹中创建 __ init __。py 脚本。如果您的脚本不需要任何特殊初始化并且不导入任何其他非库脚本,则可以是空白文件。
      4. 将您的脚本导入为模块!

        from thing_to_import_from import function_to_import