我很好奇装饰器是如何工作的,所以想看看它是否可以将通用函数放置在行走路径中。我想在路径下方的空格分隔文件中返回最长的整数段(然后返回此值或可能打印它)。这可能吗?
我试图在 countL 中返回东西但没有成功。然后很好奇如果我把它放在函数之外,这将如何工作。装饰器仅用于打印还是您可以从他们那里返回以使此示例正常运行?
def walkPath(fn):
def wrapper(*args, **kwargs):
outside = None
for dirname, dirnames, filenames in os.walk(args[0]):
for filename in filenames:
fn(filename, dirname, outside, *args, **kwargs)
return wrapper
@walkPath
def countL(filename, dirname, outside, path, extension = '.wrd'):
if (filename[-4:] == extension):
with open(os.path.join(dirname, filename), 'r') as input:
data = input.readlines()
for i in range(len(data)):
temp = data[i].split()
if (int(temp[1]) - int(temp[0]) > longest):
outside = int(temp[1]) - int(temp[0])
这解释了我在没有装饰器的情况下所做的事情,然后只是看看你是否可以获得相同的功能但使其通用。这意味着它不一定是一组文件中最长的单词,但可能是一组文件名中带有单词“s”的文件。只是不知道如何正确处理最长的外部变量,或者是否可以使用装饰器。
def countLength(path, extension = '.wrd'):
longest = 0
for dirname, dirnames, filenames in os.walk(path):
for filename in filenames:
if (filename[-4:] == extension):
with open(os.path.join(dirname, filename), 'r') as input:
data = input.readlines()
for i in range(len(data)):
temp = data[i].split()
if (int(temp[1]) - int(temp[0]) > longest):
longest = int(temp[1]) - int(temp[0])
return longest