Skip to content

Commit 8768aec

Browse files
authored
Merge pull request #18997 from anntzer/check_isinstance
Micro-optimize check_isinstance.
2 parents 83bad83 + 5f5a31f commit 8768aec

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

lib/matplotlib/cbook/__init__.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2241,21 +2241,22 @@ def _check_isinstance(_types, **kwargs):
22412241
>>> cbook._check_isinstance((SomeClass, None), arg=arg)
22422242
"""
22432243
types = _types
2244-
if isinstance(types, type) or types is None:
2245-
types = (types,)
2246-
none_allowed = None in types
2247-
types = tuple(tp for tp in types if tp is not None)
2244+
none_type = type(None)
2245+
types = ((types,) if isinstance(types, type) else
2246+
(none_type,) if types is None else
2247+
tuple(none_type if tp is None else tp for tp in types))
22482248

22492249
def type_name(tp):
2250-
return (tp.__qualname__ if tp.__module__ == "builtins"
2250+
return ("None" if tp is none_type
2251+
else tp.__qualname__ if tp.__module__ == "builtins"
22512252
else f"{tp.__module__}.{tp.__qualname__}")
22522253

2253-
names = [*map(type_name, types)]
2254-
if none_allowed:
2255-
types = (*types, type(None))
2256-
names.append("None")
22572254
for k, v in kwargs.items():
22582255
if not isinstance(v, types):
2256+
names = [*map(type_name, types)]
2257+
if "None" in names: # Move it to the end for better wording.
2258+
names.remove("None")
2259+
names.append("None")
22592260
raise TypeError(
22602261
"{!r} must be an instance of {}, not a {}".format(
22612262
k,

0 commit comments

Comments
 (0)