gpt4 book ai didi

python - 存储用于调用函数 Python 的数据

转载 作者:太空狗 更新时间:2023-10-30 02:08:40 25 4
gpt4 key购买 nike

我有一个项目,其中我通过一个特定的函数运行多个数据 "cleans"他们。

清理函数如下所示:杂项.py

def clean(my_data)
sys.stdout.write("Cleaning genes...\n")

synonyms = FileIO("raw_data/input_data", 3, header=False).openSynonyms()
clean_genes = {}

for g in data:
if g in synonyms:
# Found a data point which appears in the synonym list.
#print synonyms[g]
for synonym in synonyms[g]:
if synonym in data:
del data[synonym]
clean_data[g] = synonym
sys.stdout.write("\t%s is also known as %s\n" % (g, clean_data[g]))
return data

FileIO是我为打开文件而创建的自定义类。

我的问题是,这个函数在整个程序的生命周期中会被调用很多次。我想要实现的是不必每次都读取 input_data 因为它每次都是一样的。我知道我可以返回它,并以这种方式将其作为参数传递:

def clean(my_data, synonyms = None) 
if synonyms == None:
...
else
...

但是还有另一种更好看的方法吗?

我的文件结构如下:

lib
Misc.py
FileIO.py
__init__.py
...
raw_data
runme.py

来自 runme.py , 我这样做 from lib import *并调用我创建的所有功能。

是否有 pythonic 方法来解决这个问题?就像功能的“内存”

编辑:这一行:synonyms = FileIO("raw_data/input_data", 3, header=False).openSynonyms()返回 collections.OrderedDict()来自 input_data并使用第 3 列作为字典的键。

以下数据集的字典:

column1    column2    key    data
... ... A B|E|Z
... ... B F|W
... ... C G|P
...

看起来像这样:

OrderedDict([('A',['B','E','Z']), ('B',['F','W']), ('C',['G','P'])])

这告诉我的脚本 A也称为 B,E,Z . B作为F,W .等等……

所以这些是同义词。因为,同义词列表在代码的整个生命周期中永远不会改变。我只想读一次,然后再使用它。

最佳答案

使用带有 __call__ 运算符的类。您可以调用此类的对象并在对象中的调用之间存储数据。有些数据可能最好由构造函数保存。您以这种方式制作的内容称为“仿函数”或“可调用对象”。

例子:

class Incrementer:
def __init__ (self, increment):
self.increment = increment

def __call__ (self, number):
return self.increment + number

incrementerBy1 = Incrementer (1)

incrementerBy2 = Incrementer (2)

print (incrementerBy1 (3))
print (incrementerBy2 (3))

输出:

4
5

[编辑]

请注意,您可以将@Tagc 的答案与我的答案结合起来,以创建您正在寻找的东西:具有内置内存的“函数”。

将您的类命名为 Clean 而不是 DataCleaner 并将实例命名为 clean。将方法命名为 __call__ 而不是 clean

关于python - 存储用于调用函数 Python 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com