@@ -889,6 +889,7 @@ def _find_impl(cls, registry):
889889 return registry .get (match )
890890
891891def _get_positional_param (func , * , pos = 0 ):
892+ # Fast path for typical callables.
892893 if isinstance (func , (MethodType , classmethod , staticmethod )):
893894 func = func .__func__
894895 if isinstance (func , FunctionType ) and not hasattr (func , "__wrapped__" ):
@@ -900,10 +901,10 @@ def _get_positional_param(func, *, pos=0):
900901 # Fallback path for ambiguous callables.
901902 # Follows __wrapped__, checks __signature__, __text_signature__, etc.
902903 import inspect
903- for insp_param in list (inspect .signature (func ).parameters .values ())[pos :]:
904- if insp_param .kind in (insp_param .KEYWORD_ONLY , insp_param .VAR_KEYWORD ):
904+ for param in list (inspect .signature (func ).parameters .values ())[pos :]:
905+ if param .kind in (param .KEYWORD_ONLY , param .VAR_KEYWORD ):
905906 break
906- return insp_param .name
907+ return param .name
907908 return None
908909
909910def singledispatch (func ):
@@ -988,8 +989,9 @@ def register(cls, func=None, _func_is_method=False):
988989 f"does not accept positional arguments."
989990 ) from None
990991
991- from annotationlib import Format , ForwardRef
992+ # only import typing if annotation parsing is necessary
992993 import typing
994+ from annotationlib import Format , ForwardRef
993995 annotations = typing .get_type_hints (func , format = Format .FORWARDREF )
994996
995997 try :
0 commit comments