Python Pandas全局vs传递变量

Python Pandas global vs passed variable

我正在创建一个"实时"过程,它从SierraChart正在更新的专有格式的ohlcvtba文件中获取数据。读取数据并使用生成器创建数据帧的代码发布在Pastebin上。

我已经意识到我的结构(新的数据驱动)是错误的,我将重新组织它。phe的问题和wes的回应使我朝着填充一个工作良好的预填充数据帧的方向发展。我的问题是:

将数据帧和指针保存为全局变量还是将它们传递给使用它们的各种函数或从中传递它们更快?此外,是否还有其他因素可以推动这一选择?

谢谢。


局部变量比Python中的全局变量访问速度更快。

在panda的上下文中,这意味着您应该将变量传递到有意义的函数中(这意味着可以在函数中更快地找到它们)。相反,python中的函数调用很昂贵(如果您大量调用它们的话),这就是numpy/pandas在可能的情况下使用向量化函数的原因。显然,如果在函数内执行操作,则必须小心确保所有计算都是就地完成的。

在担心速度之前,我通常会先用"Python式的"/"泛滥成灾的"方式让事情运转起来。然后使用%timeit,看看它是否已经足够快了(通常是这样)。添加UnitTest。调整速度,EDOCX1(0%),修剪和%timeit更多。如果这是一个大项目,vbench。


你需要对它进行分析,但我的猜测是,如果有任何显著的差异,它有利于全球。引用仍在内存中,不进行引用计数。

(编辑:不管怎样,请参阅@andy hayden的链接,了解它们的相对访问时间,以及此处的链接,该链接表示局部变量更快)。

主要考虑的是"软件工程"——使用全局数据是一个坏主意,因为很难跟踪何时何地更改数据。当然,如果你不能以其他方式满足需求(运行时),那么就必须完成它;但是为了知道它,首先要测量。

无论如何,我建议使用另一种解决方案-将此数据保存在类中。它将花费更多的字典查找(第一个查找是变量名,而且无论如何都会发生;第二个查找是类dict中的查找),但是它可能比传递许多对象更有效,并且有助于组织程序。