Python:在导入的模块中构造模块变量的最佳方法

时间:2018-08-30 03:51:32

标签: python python-import

假设我在文件numbers.csv中有一个参考编号列表。

我正在编写一个模块checker.py,可以将其导入并调用以检查像这样的数字:

import checker
checker.check_number(1234)

checker.py将加载数字列表,并提供check_number来检查列表中是否有给定的数字。默认情况下,它应该从numbers.csv加载数据,尽管可以指定路径:

DATA_FILEPATH = 'numbers.csv'

def load_data(data_filepath=DATA_FILEPATH):
    ...

REF_LIST = load_data()  

def check_number(num, ref_list=REF_LIST):
    ...

问题-变量和函数的交错对我来说似乎很奇怪。有没有比以上更好的结构checker.py的结构了?

我读了enter image description here的出色答案。

最佳做法是:

  • 声明我在上面完成的REF_LIST列表?

  • 创建像VARS = {'REF_LIST': None}这样的字典并在VARS['REF_LIST']中设置load_data

  • 创建一个简单的类并在clas.REF_LIST中分配load_data

  • 还是取决于情况? (在什么情况下我该使用哪种?)

注意

以前,我通过仅在调用模块中需要时才加载数据来避免这种情况。因此,在checker.py中:

DATA_FILEPATH = 'numbers.csv'

def load_data(data_filepath=DATA_FILEPATH):
    ...

def check_number(num, ref_list):
    ...

在调用模块中:

import checker
ref_list = checker.load_data()
checker.check_number(1234, ref_list)

但是对于我来说,装入调用模块并不是很有意义,因为如果我想检查5个不同模块中的数字,我将需要load_data 5次。

1 个答案:

答案 0 :(得分:0)

您可以借助Pandas框架轻松加载csv数据

import pandas as pd
dataframe=pd.read_csv('numbers.csv')

使用以下代码检查datframe中是否存在数字:

numbers=[1,3,8]
for number in numbers:
    if number in dataframe[dataframe.columns[0]]:
        print True
    else:
        print False