summaryrefslogtreecommitdiffstats
path: root/Lib/functools.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/functools.py')
-rw-r--r--Lib/functools.py13
1 files changed, 8 insertions, 5 deletions
diff --git a/Lib/functools.py b/Lib/functools.py
index 25075de..a51dddf 100644
--- a/Lib/functools.py
+++ b/Lib/functools.py
@@ -19,8 +19,7 @@ except ImportError:
pass
from abc import get_cache_token
from collections import namedtuple
-from types import MappingProxyType
-from weakref import WeakKeyDictionary
+# import types, weakref # Deferred to single_dispatch()
from reprlib import recursive_repr
from _thread import RLock
@@ -753,10 +752,14 @@ def singledispatch(func):
function acts as the default implementation, and additional
implementations can be registered using the register() attribute of the
generic function.
-
"""
+ # There are many programs that use functools without singledispatch, so we
+ # trade-off making singledispatch marginally slower for the benefit of
+ # making start-up of such applications slightly faster.
+ import types, weakref
+
registry = {}
- dispatch_cache = WeakKeyDictionary()
+ dispatch_cache = weakref.WeakKeyDictionary()
cache_token = None
def dispatch(cls):
@@ -803,7 +806,7 @@ def singledispatch(func):
registry[object] = func
wrapper.register = register
wrapper.dispatch = dispatch
- wrapper.registry = MappingProxyType(registry)
+ wrapper.registry = types.MappingProxyType(registry)
wrapper._clear_cache = dispatch_cache.clear
update_wrapper(wrapper, func)
return wrapper