Ruby数组块实例化的Python等效语法是什么?
Ruby的
Array.new(5) { SomeClass.new }在Python中的等效写法 当然有啦!在Python里,你可以用两种常见方式实现和你Ruby代码完全等效的效果——核心都是每次迭代创建一个全新的SomeClass实例,而不是重复引用同一个实例。
1. 最推荐:列表推导式
这是Python社区最常用、可读性最高的写法,和Ruby的块语法语义完全对应:
class SomeClass: pass # 生成5个独立的SomeClass实例 instance_list = [SomeClass() for _ in range(5)] print(instance_list) # 输出示例: [<__main__.SomeClass object at 0x7f9a2d03e250>, <__main__.SomeClass object at 0x7f9a2d03e290>, ...]
这里的_是个占位符变量,用来表示我们不需要使用循环的索引值,只是需要执行5次实例化操作。
2. 用map+匿名函数(lambda)实现
如果你更倾向于类似匿名函数的写法,可以结合map和lambda来完成:
instance_list = list(map(lambda: SomeClass(), range(5)))
不过要注意,map返回的是一个迭代器,所以需要用list()把它转换成列表。这种写法和列表推导式效果一样,但可读性稍差,一般不推荐在这种简单场景下使用。
重要提醒:避坑!
千万别写成[SomeClass()]*5,这是很多新手容易踩的坑——它会创建一个包含5个同一个SomeClass实例引用的列表,而不是5个独立的实例,和你Ruby代码的预期效果完全不符!
内容的提问来源于stack exchange,提问作者kingsfoil
相关产品推荐
相关产品推荐

