通过在旧元组上循环来创建新元组的更有效的方法



当光标悬停在tkinter画布圆形矩形按钮上时,我已经使用以下方法调整了颜色:

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
"""
converted = []
for i in rgb:
if i < 128:
i = i + 64
else:
i = i - 64
converted.append(i)
return tuple(converted)

我看过列表理解和元组生成器的代码,我相信它们会大大缩短代码。然而,我可以";理解";如何做到这一点?


回复评论

";你被困在哪里了">

我在发电机上的尝试是这样的:

return tuple(i = i + 64 if i<128 else i = i - 64 for i in rgb)

通常在Python中我会使用:

i = i + 64

或:

i += 64

但很明显,在发电机内,你进入了另一个宇宙,物理规则变为:

i + 64

您可以将生成器表达式传递给元组构造函数。

return tuple(i+64 if i<128 else i-64 for i in rgb)

元组理解没有直接的语法,可能是因为元组通常包含异构数据,而列表通常包含同构数据。

return (i + 64 if i < 128
else i - 64
for i in rgb)

你被困在哪里了?

试试这个:

return tuple([i+64 if i < 128 else i - 64 for i in rgb])

相关内容

最新更新