如何在Python中实现Ruby风格的each方法?
在Python中实现类似Ruby的each方法
Ruby里用%w[1 2 3 4].each { |i| puts i }就能遍历集合里的每个元素并执行代码块,而Python通常直接用for循环:for i in [1,2,3]: print(i)。你说自己写的Iter类的each方法只返回第一个元素,大概率是没在方法里做完整遍历,只处理了第一个元素就停了。
正确的实现方式
给自定义类的each方法加个循环,遍历所有元素并调用传入的回调函数就行,比如:
class Iter: def __init__(self, items): self.items = items # 初始化要遍历的集合 def each(self, func): # 循环遍历每个元素,逐个执行传入的函数 for item in self.items: func(item)
测试代码
用lambda或者自定义函数做回调,就能实现和Ruby each一样的效果:
# 用lambda打印每个元素 Iter([1,2,3,4]).each(lambda i: print(i)) # 也可以传自定义函数 def print_item(item): print(f"元素:{item}") Iter(["a", "b", "c"]).each(print_item)
为什么你的代码只返回第一个元素?
大概率是你的each方法里没有循环,只处理了一次索引对应的元素就结束了。比如错误写法可能是这样:
# 错误示例:只处理第一个元素 class Iter: def __init__(self, items): self.items = items self.index = 0 def each(self, func): if self.index < len(self.items): func(self.items[self.index]) self.index += 1
这种写法每次调用each才处理一个元素,而不是一次性遍历完所有元素。改成上面带for循环的写法,就能一次性遍历全部元素了。
内容的提问来源于stack exchange,提问作者SonyMag
相关产品推荐
相关产品推荐

