如何优化RGB颜色迭代代码,减少重复冗余?
优化RGB迭代脚本的方案
你的代码核心是按6个阶段迭代RGB通道,每个阶段仅单个通道按增量列表变化,另外两个通道保持固定值。可以通过抽象阶段配置的方式,把6段重复循环合并为一个父循环,大幅缩减代码量的同时,提升可读性和维护性。
优化后的代码
color_numbers = [0, 255] increment_between_values = [64, 64, 63, 64] def color_function(): # 初始化RGB当前值 r, g, b = color_numbers[0], color_numbers[1], color_numbers[0] # 定义6个阶段的配置:(变化通道, 增量方向, 固定R值, 固定G值, 固定B值) # None代表不强制固定,沿用当前值 stages = [ ('b', 1, color_numbers[0], color_numbers[1], None), # B递增,R=0、G=255 ('g', -1, color_numbers[0], None, b), # G递减,R=0、B保持当前最大值 ('r', 1, None, g, b), # R递增,G保持当前最小值、B=255 ('b', -1, r, g, None), # B递减,R=255、G=0 ('g', 1, r, None, b), # G递增,R=255、B保持当前最小值 ('r', -1, None, g, b), # R递减,G=255、B=0 ] for stage in stages: chan, delta, fixed_r, fixed_g, fixed_b = stage # 应用固定值(若配置中有指定) r = fixed_r if fixed_r is not None else r g = fixed_g if fixed_g is not None else g b = fixed_b if fixed_b is not None else b # 遍历增量列表,更新对应通道并输出RGB值 for inc in increment_between_values: if chan == 'r': r += delta * inc elif chan == 'g': g += delta * inc elif chan == 'b': b += delta * inc print(f"{r},{g},{b}") color_function()
优化思路说明
- 抽象阶段配置:把6个循环的逻辑提炼成
stages列表中的配置项,每个配置项明确当前阶段的变化通道、增量方向(正/负),以及另外两个通道的固定值。后续修改或新增阶段,只需调整配置即可,无需重复编写循环代码。 - 统一状态管理:用单个变量
r、g、b跟踪当前RGB值,替代三个独立的列表,减少冗余操作。 - 动态通道更新:在每个阶段内部,根据配置动态更新对应通道的值,避免重复的循环结构。
- 即时输出结果:在增量循环中直接打印RGB字符串,省去最后遍历三个列表拼接的步骤,提升运行效率。
可复用的生成器版本
如果需要后续复用生成的RGB值,可改用生成器封装逻辑,分离生成与输出操作:
color_numbers = [0, 255] increment_between_values = [64, 64, 63, 64] def generate_rgb(): r, g, b = color_numbers[0], color_numbers[1], color_numbers[0] stages = [ ('b', 1, color_numbers[0], color_numbers[1], None), ('g', -1, color_numbers[0], None, b), ('r', 1, None, g, b), ('b', -1, r, g, None), ('g', 1, r, None, b), ('r', -1, None, g, b), ] for chan, delta, fr, fg, fb in stages: r = fr if fr is not None else r g = fg if fg is not None else g b = fb if fb is not None else b for inc in increment_between_values: locals()[chan] += delta * inc yield f"{r},{g},{b}" # 使用生成器输出结果 for rgb_str in generate_rgb(): print(rgb_str)
内容的提问来源于stack exchange,提问作者jonathan gabizon
相关产品推荐
相关产品推荐

