[Python-checkins] bpo-42452: Improve colorsys.rgb_to_hls code (GH-23306)

terryjreedy webhook-mailer at python.org
Sat Nov 28 02:11:33 EST 2020


https://github.com/python/cpython/commit/f9195318a863e237f41ed7665c767028cde1c9a3
commit: f9195318a863e237f41ed7665c767028cde1c9a3
branch: master
author: Julien Jerphanion <git at jjerphan.xyz>
committer: terryjreedy <tjreedy at udel.edu>
date: 2020-11-28T02:11:19-05:00
summary:

bpo-42452: Improve colorsys.rgb_to_hls code (GH-23306)

Cache repeated sum and difference to make code slightly faster and easier to read.

files:
M Lib/colorsys.py

diff --git a/Lib/colorsys.py b/Lib/colorsys.py
index b93e3844067e4..0f52512a67d87 100644
--- a/Lib/colorsys.py
+++ b/Lib/colorsys.py
@@ -75,17 +75,18 @@ def yiq_to_rgb(y, i, q):
 def rgb_to_hls(r, g, b):
     maxc = max(r, g, b)
     minc = min(r, g, b)
-    # XXX Can optimize (maxc+minc) and (maxc-minc)
-    l = (minc+maxc)/2.0
+    sumc = (maxc+minc)
+    rangec = (maxc-minc)
+    l = sumc/2.0
     if minc == maxc:
         return 0.0, l, 0.0
     if l <= 0.5:
-        s = (maxc-minc) / (maxc+minc)
+        s = rangec / sumc
     else:
-        s = (maxc-minc) / (2.0-maxc-minc)
-    rc = (maxc-r) / (maxc-minc)
-    gc = (maxc-g) / (maxc-minc)
-    bc = (maxc-b) / (maxc-minc)
+        s = rangec / (2.0-sumc)
+    rc = (maxc-r) / rangec
+    gc = (maxc-g) / rangec
+    bc = (maxc-b) / rangec
     if r == maxc:
         h = bc-gc
     elif g == maxc:



More information about the Python-checkins mailing list