【问题标题】:Global dataframes - good or bad全局数据框 - 好或坏
【发布时间】:2016-07-22 02:43:35
【问题描述】:

我有一个程序,我将数百万行加载到数据帧中,并且我将它们声明为全局,因此我的函数 (>50) 都可以像过去使用数据库一样使用它们。我读到使用全局变量很糟糕,并且由于它的内存映射,使用全局变量的速度较慢。

我想问如果全局变量不好,那么好的做法是什么?在函数和嵌套函数周围传递 > 10 个数据帧似乎也不是很干净的代码。 最近程序变得笨拙,因为不同的功能也会更新不同的单元格,插入,从数据框中删除数据,所以我正在考虑将数据框包装在一个类中以使其更易于管理。这是个好主意吗?

【问题讨论】:

  • 在没有看到实际代码的情况下给出非常有针对性的反馈有点困难。您可以考虑将您的一些功能发布到codereview.stackexchange.com 以获得更具体的建议。

标签: python pandas global


【解决方案1】:

是的。您应该将数据包装到一个对象中,然后将该对象传递给您的函数,而不是使用全局变量(请参阅依赖注入)。

将其包装在一个对象中而不是使用全局意志:

  1. 允许您对代码进行单元测试。这绝对是最重要的原因。使用全局变量会使测试代码变得非常困难,因为由于其全局性质,不可能单独测试任何代码。
  2. 安全地对您的代码执行操作,而不必担心随机的可变性错误
  3. 停止发生可怕的并发错误,因为一切都是全局的。

【讨论】:

  • 是的,我现在正在面对它。你会如何包装它们?每个数据框的每个类?您是否建议任何标准的类结构来管理数据帧?
  • 您可以只创建一个名为“DataFrame”的超类,并让每种类型的数据框都继承自它。只需将所有全局变量重构到这些类中即可。虽然,它会破坏您的所有代码,因为它们都依赖于全局存在,因此更改可能非常耗时。 (基本上,你必须改变一切。)
  • 谢谢,我会去弄清楚,你知道任何可以引导我写这样一个结构的网址吗?很尴尬,但我的整个代码现在只是函数......
  • 在您开始编写一个好的 OOP 设计之前,您必须阅读大量内容。不过总的来说,关注SOLID应该不错,en.wikipedia.org/wiki/SOLID_(object-oriented_design)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2011-03-30
  • 1970-01-01
  • 2017-07-11
相关资源
最近更新 更多