用于同步初始化的Python简写?

时间:2015-10-14 07:54:51

标签: python

假设我有父类 - “父”,我想创建三个对象 - o1,o2,o3。

因此,如果有一个简短的手或一个美丽的方式来做以下事情:

sysctlbyname("hw.machine", machineNameAsCString, &size, NULL, 0);

2 个答案:

答案 0 :(得分:2)

它是否更美丽是一个意见问题,但你可以在一行中做到这一点,如下:

o1, o2, o3 = Parent(), Parent(), Parent()

但请注意,以下操作,因为它为每个变量分配了相同的对象:

o1 = o2 = o3 = Parent() # does NOT work!

您还可以使用列表推导或生成器表达式来创建三个实例,并使用列表解包将它们分配给不同的变量:

o1, o2, o3 = (Parent() for _ in range(3))

这可能看起来有点复杂,但如果Parent的初始化更复杂,可能是最佳解决方案,例如:如果你也传递一些参数。

您可能想要使用列表乘法,但是再次,这不起作用,因为列表将保存对同一对象的三个引用。

o1, o2, o3 = [Parent()] * 3 # does NOT work, too!

答案 1 :(得分:2)

这完全取决于你的要求。如果您只想创建三个Parent对象,则可以生成元组:

objs = tuple(Parent() for _ in xrange(3))

并以objs[0]objs[1]objs[2]的形式访问对象。

如果您确实希望将它们命名为o1o2o3,那么您可以解压缩元组:

o1, o2, o3 = (Parent() for _ in xrange(3))

请注意,这大致相当于以下内容:

o1, o2, o3 = Parent(), Parent(), Parent()

第二种和第三种方法的缺点是必须确保LHS和RHS上元组中的元素数匹配。