我在看(大概)内置模块"typing.py",我试图了解里面发生了什么。我特别关注下面的代码,在这里我们看到一个名为"typed=False“的输入参数。这到底是什么意思?
据我所知,"func=None“似乎意味着”输入中不允许任何函数“(如果我错了,请纠正我),其中"func”指的是对象类型的“函数”(想必大多数程序员都熟悉它,因为它是一个基本概念)。但是"typed=False“呢?
def _tp_cache(func=None, /, *, typed=False):
"""Internal wrapper caching __getitem__ of generic types with a fallback to
original function for non-hashable arguments.
"""
def decorator(func):
cached = functools.lru_cache(typed=typed)(func)
_cleanups.append(cached.cache_clear)
@functools.wraps(func)
def inner(*args, **kwds):
try:
return cached(*args, **kwds)
except TypeError:
pass # All real errors (not unhashable args) are raised below.
return func(*args, **kwds)
return inner
if func is not None:
return decorator(func)
return decorator发布于 2021-06-27 19:07:48
据我理解,"func=None“似乎意味着”输入中不允许任何函数“(如果我错了,请纠正我),其中"func”指的是对象类型的“函数”(想必大多数程序员都熟悉它,因为它是一个基本概念)。但是"typed=False“呢?
所有这些都不正确。
func是一个参数名,而不是类型。=None意味着如果不提供值,则默认为None。typed是另一个参数名;=False表示它默认为False。参数列表中的*和/指示func是一个位置参数(也就是说,它始终只是第一个参数,调用者不需要说func=),typed是关键字参数(也就是说,调用方必须始终指定为typed=SOMETHING )。
尝试理解Python代码而不对Python语法有基本的理解将是非常困难的;这不是像您在这里试图做的那样可以猜测的事情,特别是当您直接深入到修饰器(高阶)函数时,这是一个相对高级的特性,并且要求您已经对基本函数的工作方式有了很好的理解。
我建议您通过Python教程,例如https://docs.python.org/3/tutorial/。
https://stackoverflow.com/questions/68154402
复制相似问题