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

问题描述 投票:0回答:1

假设我在文件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有比上述更好的方法吗?

我读了How to create module-wide variables in Python?的优秀答案。

最佳做法是:

  • 我在上面做过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个不同模块中的数字,我需要5次load_data

python python-import
1个回答
0
投票

您可以在Pandas框架的帮助下轻松加载csv数据

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

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

numbers=[1,3,8]
for number in numbers:
    if number in dataframe[dataframe.columns[0]]:
        print True
    else:
        print False
© www.soinside.com 2019 - 2024. All rights reserved.