gpt4 book ai didi

python - 添加或读取时处理数据

转载 作者:行者123 更新时间:2023-12-01 09:15:50 24 4
gpt4 key购买 nike

哪种方式更适合python风格:

class Foo:
def __init__(self):
self.sorted_elements = []

def add_element(self, element):
self.sorted_elements.append(element)
self.sorted_elements.sort()

def read_elements(self):
for element in self.sorted_elements:
do_something(element)

class Foo:
def __init__(self):
self.elements = []

def add_element(self, element):
self.elements.append(element)

def read_elements(self):
for element in sorted(self.elements):
do_something(element)

我们应该什么时候处理数据?当我们收集它或用它做某事时?当然,我们可以发表一个声明,这取决于我们更多地做什么,添加或阅读。但如果我们必须制定经验法则,那会是什么?恕我直言,我倾向于第二种方式,因为它保证正确的顺序而不依赖于某些外部状态。

最佳答案

这些解决方案都没有比其他解决方案更Python化,并且两者都有优点和缺点,具体取决于您的典型用例。两者都有几个问题......

  • 如果连续添加数千条数据,第一个解决方案效率非常低

  • 第二个继续对大多数时候已经排序的列表进行排序。考虑到 Python 的内置排序算法行为,这应该不是一个大问题,但这仍然是一些函数调用,而且它们不是免费的。

  • 在这两种情况下,作为公共(public)属性公开的 elements 会破坏封装性,并使整个问题变得毫无意义,因为任何人都可以在不排序的情况下添加到 .elements它位于 .elements 之后或从 .elements 读取,而不在之前对其进行排序...

所以要做的第一件事实际上是将元素设为私有(private)。然后您想要跟踪 _elements 是否需要排序:

class Foo:

def __init__(self):
self._elements = []
self._sorted = True

def add_element(self, element):
self._elements.append(element)
self._sorted = False

def read_elements(self):
if not self._sorted:
self._elements.sort()
self._sorted = True

for element in self._elements:
do_something(element)

现在您有了一个正确封装的实现,仅在必要时进行排序...

关于python - 添加或读取时处理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51266055/

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