簡體   English   中英

Python:如何從依賴於模塊的另一個文件中正確導入函數

[英]Python: how to properly import a function from another file that depends on module

假設我有兩個文件。 第一個包含了我編寫的所有功能,這些功能通常是從主文件中導入的:

# 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])

有沒有更有效的方法來導入此功能? 我必須為我創建的每個功能導入每個模塊嗎? 如果我在依賴同一模塊的同一文件中有多個功能,那會怎樣?

就是這樣

 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 pdpd在命名空間中。

# 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)

您可以將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 ,則無論您是否導入x ,您都會發現y()返回5。 無論功能對象需要做什么工作,它都隨身攜帶。 這包括何時將其導入另一個模塊。

您也可以這樣做。

# main.py
from my_functions import *

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

有幾種方法可以做到這一點。

  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上的Lib for Python2.7的默認位置是C:\\ Python27 \\ Lib 。)
      2. 將腳本與要導入的功能一起放入此文件夾中。
      3. 在此文件夾中創建一個__init__.py腳本。 如果您的腳本不需要任何特殊的初始化並且不導入任何其他非庫腳本,則該文件可以為空白文件。
      4. 將腳本導入為模塊!

         from thing_to_import_from import function_to_import 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM