gpt4 book ai didi

Python:如何将变量传递给装饰器并且装饰器也将装饰器变量传递回函数?

转载 作者:行者123 更新时间:2023-12-04 03:44:47 25 4
gpt4 key购买 nike

我总是循环访问目录中的文件以执行各种数据操作。因此,我总是使用下面的代码

for subdir, dirs, files in os.walk(dir_):
for file_name in files:
# manipulations here

我想知道是否可以通过使用装饰器来改善它,而不是为每个函数都编写这些代码行。像下面这样:

# decorator
def wrapper_layer1(directory):
def wrapper_layer2(func):
def wrapper_layer3(*args, **kwargs):
for subdir, dirs, files in os.walk(dir_):
for file_name in files:
func(subdir, dirs, files, file_name)
return wrapper_layer3
return wrapper_layer2
return wrapper_layer1

# function
@wrapper_layer1(dir_=r"")
def func(subdir, dirs, files, file_name):
# manipulations here

我已经找到了很多关于如何将参数传递给装饰器的资源。但是在这种情况下,它不仅需要向装饰器传递参数,还需要装饰器传递参数给函数。

有人知道怎么实现吗?

最佳答案

接受装饰器函数参数的函数(在您的示例中为 wrapper_layer1)应该返回装饰器函数,而不是它本身。同样,装饰函数(在您的示例中为 wrapper_layer2)应该返回包装函数,而不是它本身。最后,包装函数(在您的示例中为 wrapper_layer3)应该向调用者返回除自身之外的其他内容,如果有的话:

def for_each_file(dir_):
def decorator(func):
def wrapper(*args, **kwargs):
for subdir, dirs, files in os.walk(dir_):
for file_name in files:
func(subdir, dirs, files, file_name)
# return something meaningful, or don't return anything at all if
# the caller does not expect a returning value
return wrapper
return decorator

关于Python:如何将变量传递给装饰器并且装饰器也将装饰器变量传递回函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65353233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com