Speed-up building enums by value, e.g. http.HTTPStatus(200) (#11318)

bpo-35585: Speed up enum by-value lookup
This commit is contained in:
Andrew Svetlov 2018-12-26 20:45:33 +02:00 committed by Ethan Furman
parent 3a81076bbf
commit 34ae04f74d
2 changed files with 5 additions and 2 deletions

View File

@ -563,8 +563,10 @@ class Enum(metaclass=EnumMeta):
# by-value search for a matching enum member # by-value search for a matching enum member
# see if it's in the reverse mapping (for hashable values) # see if it's in the reverse mapping (for hashable values)
try: try:
if value in cls._value2member_map_:
return cls._value2member_map_[value] return cls._value2member_map_[value]
except KeyError:
# Not found, no need to do long O(n) search
pass
except TypeError: except TypeError:
# not there, now do long search -- O(n) behavior # not there, now do long search -- O(n) behavior
for member in cls._member_map_.values(): for member in cls._member_map_.values():

View File

@ -0,0 +1 @@
Speed-up building enums by value, e.g. http.HTTPStatus(200).