如何优雅编写Python代码:仅当循环执行时调用指定函数
优雅实现仅当生成器循环执行过才调用函数的几种方法
给你几个实用的写法,按需选择:
标记变量法(最直观)
用一个布尔变量记录循环是否执行过,逻辑清晰,新手也能一眼看懂:loop_ran = False for i in get_generator(): loop_ran = True # 这里写你的循环处理逻辑 # ... if loop_ran: some_function()提前获取首元素法
利用生成器的迭代特性,先拿第一个元素判断生成器是否为空,再统一处理所有元素:gen = get_generator() try: first = next(gen) # 处理第一个元素 # ... # 处理剩下的元素 for i in gen: # ... # 能走到这说明循环执行过 some_function() except StopIteration: # 生成器是空的,啥也不做 pass如果循环里的处理逻辑重复,可以把它封装成一个函数,避免代码冗余。
结合itertools简化写法
用itertools.chain把首元素和剩余生成器合并,保持原有的单循环结构:import itertools gen = get_generator() try: first = next(gen) for i in itertools.chain([first], gen): # 这里写你的循环处理逻辑 # ... some_function() except StopIteration: pass转列表判断法(仅适合小生成器)
如果生成器里的元素不多,直接转成列表再判断,代码最简洁:items = list(get_generator()) for i in items: # ... 循环逻辑 pass if items: some_function()注意:如果生成器是无限的或者元素量极大,这种方法会直接爆内存,别乱用。
内容的提问来源于stack exchange,提问作者Kanony
相关产品推荐
相关产品推荐

