Python实现RGB色值调整时遍历旧元组高效创建新元组的方法
正确实现方式
你出现语法错误的核心原因是:生成器/列表推导式中仅需要定义每个迭代位置要返回的值表达式,不需要额外写赋值语句,赋值语句本身没有返回值,不符合推导式的语法规则。
原逻辑可以直接通过生成器表达式简化为一行:
def shade_rgb(rgb): """ Adjust shade of rgb by 25% (value 64 out of 256) :param rgb: tuple of red, green, blue integers 0 to 255 :returns: tuple of red, green, blue integers 0 to 255 """ return tuple(i + 64 if i < 128 else i - 64 for i in rgb)
语法说明
Python三元表达式的结构为 结果1 if 判断条件 else 结果2,本身会直接返回条件匹配的计算结果,不需要再给循环变量i赋值:
- 当
i < 128时,表达式直接返回i + 64的计算结果作为生成器的当前元素 - 当
i >= 128时,表达式直接返回i - 64的计算结果作为生成器的当前元素tuple()方法会迭代生成器产出的所有元素,直接组装为元组返回,和你原始的循环逻辑完全等效。
如果你想用列表推导式实现,写法也类似:
return tuple([i + 64 if i < 128 else i - 64 for i in rgb])
生成器写法不需要先创建完整的中间列表,内存占用更低,更推荐使用。
内容的提问来源于stack exchange,提问作者WinEunuuchs2Unix
相关产品推荐
相关产品推荐

