Python通用容器?

3

将变量归为特定对象下是很方便的。

我的使用场景是tensorflow,你经常需要先定义一个图形,然后再用实际数据进行填充。为了避免混淆图形变量和数据变量的名称,将它们全部归为一个对象是非常有用的。我一直在做的是:

g = lambda: None
g.iterator = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(minibatch_size).make_initializable_iterator()
g.x_next, g.y_next = g.iterator.get_next()
g.data_updates = g.x_data.assign(g.x_next), g.y_data.assign(g.y_next)

如果你使用lambda: None,那么你的同事很可能会感到愤怒和困惑。

有没有一种替代方案,提供同样简洁的语法,但使用的是更明显的容器而不是lambda: None

我最初尝试将它们全部作为类的静态成员,但问题是静态成员不能引用其他静态成员。 g=object()很好,但不允许你分配属性。


like a dictionary? - avigil
就像词典一样,但没有“g ['iterator']”这样笨重的感觉。 - Peter
为什么不定义自己的类? - Cong Ma
5
使用types.SimpleNamespace怎么样? - Aran-Fey
2
如果你继承自object,那么你已经拥有了一堆非常有用的方法。 - Cong Ma
显示剩余2条评论
1个回答

4
如果不值得定义一个专门的类,可以使用 types.SimpleNamespace,它是一个专门设计用于保存属性的类。
g = types.SimpleNamespace()
g.iterator = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(minibatch_size).make_initializable_iterator()
g.x_next, g.y_next = g.iterator.get_next()
g.data_updates = g.x_data.assign(g.x_next), g.y_data.assign(g.y_next)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接