我在两个独立的函数中使用了一个装饰器:一个带有装饰器参数的函数和另一个没有参数的函数。当不传递可选参数时,返回类型是一个函数(具体来说,是装饰器中的inner_function)。然而,当传递可选参数时,它按预期工作。
你能解释一下这里发生了什么以及为什么在这些情况下行为不同吗?
你能解释一下这里发生了什么以及为什么在这些情况下行为不同吗?
def cache_disk(cache_folder="./cache"):
def wrapper(f):
def inner_function(*args, **kwargs):
result = f(*args, **kwargs)
return result
return inner_function
return wrapper
@cache_disk
def func1(data):
return [d for d in data]
@cache_disk(cache_folder='./cache/')
def func2(data):
return [d for d in data]
data = [1,2,3]
print(func1(data))
print(func2(data))
结果:
<function inner_function at 0x7f1f283d5c08>
[1, 2, 3]
@x
和@x.y
来区分不同情况。 - o11c@cache_disk.wrapper
?还是有其他事情正在发生? - jonrsharpecache_disk.wrapper = cache_disk()
。 - o11c