我的游戏中有很多变量需要跟踪,我想知道创建许多类实例是否有不利之处:
event_1 = event(name, chance, [people])
event_2 = event(name, chance, [people])
...
events = [event_1, event_2]
不仅仅是创建嵌套列表?
events = [
[name, chance, [people]],
[name, chance, [people]],
...
]
除了为了易于使用而对某些实例名称进行交易以外,我是否还要担心诸如性能下降之类的问题?
编辑:我提到了易用性,我想知道的是:列表中的类使用的资源比嵌套列表使用的资源多吗?还是相反?
答案 0 :(得分:2)
我的建议是首先针对代码的可读性和可维护性进行优化。仅在表现得很明显成为问题时才关注性能。知道这是一个问题之后,您就可以完整地测量系统,确定瓶颈并加以解决。
您可能会发现:
考虑到这一点,与第二种方法相比,我更倾向于第一种方法。
答案 1 :(得分:1)
如果您的类没有太多方法,只定义了几个实例变量,我宁愿只使用嵌套列表,这是我的意思是一个示例类:
class A:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
如果您的类确实有很多方法,我认为使用类是一个好主意,我的意思是一个示例类:
class A:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def f1(self):
return [x / y for x, y in zip(self.a + self.b, self.c)]
def f2(self):
return [[*self.a, *self.b, *self.c, i + 1] for i in range(3)]
def f3(self):
for x, y in enumerate(self.a):
if y > 3:
self.b[x] = y / 3
return self.b
...
答案 2 :(得分:1)
这取决于您的确切缺点。从性能的角度来看,您应该首先编写易读性,然后进行度量,然后进行优化。但这已经写好了,因此让我们探究这两种样式的第二个主要区别。
如果您写:
a = event(name, chance, [people])
b = event(name, chance, [people])
c = event(name, chance, [people])
然后创建命名实例。您可以按名称访问它们,这意味着它们在使用时更易于遵循,并且访问不依赖于顺序。最重要的是,a
的访问速度比list[a_index]
稍快,尽管这很难衡量。
二手写作:
list = [
event(name, chance, [people]) # a
event(name, chance, [people]) # b
event(name, chance, [people]) # c
]
产品列表。现在,您当然可以为列表创建命名索引并像这样list[index_for_a]
进行操作了,但这比较麻烦,需要更多的代码,并且此代码也更脆弱(足以修改列表的顺序一次,以破坏所有内容向上)。另一方面,您会得到一个列表,可以按定义好的顺序对进行迭代(也可以对成员/局部变量进行迭代,但是顺序可能是任意的)。
所以这些是主要区别。您选择的内容取决于您,但就个人而言,我会选择第一个版本,因为命名是对可读性的极大推动。