我正在用Python3.5编写一个程序,它读取数据集并做一些事情(如果你熟悉它就是DICOM数据)。它使用:
现在我的程序有许多不同的组件,它们都将使用相同的数据集。我的问题是处理这些数据的最佳做法是什么?我:
哪种方法最好?我不是一次或两次访问这些数据,而是大约20次。是否有一种我不知道应该使用的方法?
在此先感谢,我非常重视你的帮助(以及必要的批评),以便始终提高自己作为程序员和人类的能力。
答案 0 :(得分:1)
好像你实际上在这里提出了多个问题。让我试着将它们分开:
通过赋值"传递Python函数参数"可以这么说。要使用C术语,虽然技术上不精确,但它更像是通过引用传递而不是按值传递。你通常不会看到这种行为,因为1)python中的很多东西是不可变的,2)python中的赋值语句只是将名称重新分配给不同的值。您可以看到此行为的示例是可变对象,如list
,dict
或具有可变成员属性的任何类型的对象。尝试将列表传递给函数并在其中进行修改。在函数返回后,它也将在传递上下文中进行修改。
这取决于我能想到的几件事。首先,您决定将数据存储在内存中还是磁盘上(请参阅第一个问题)?其次,您需要从何处访问数据?第三,如果你将它存储在内存中,你是否需要在程序运行之间保持数据?
如果你可以将数据存储在内存中,只需要在本地访问它,并且不需要它继续存在,我会选择某种嵌套的python dict
,也许只需要一个或者更多自定义class
es以简化数据接口。
如果您可以将数据存储在内存中,但要么需要通过网络访问它,要么需要在程序运行之间保持数据,我会使用 redis 或类似的键值存储管理数据。 redis is really easy to learn和there's good python library support。
如果您无法将数据存储在内存中,但又不想一遍又一遍地对其进行解析,那么在将其写回磁盘之前,至少应将其编入索引。如果您只需要本地访问,则可以使用文件系统来提出自己的索引方案。如果这变得太复杂或者您需要网络访问,则应该使用数据库系统。