我很好奇裝飾器是如何工作的,所以看到它是否適用於將通用函數放在走路徑中。我想在路徑下的空間分隔文件中返回最長的整數段(然後返回該值或可能打印它)。這可能嗎?在Python中使用裝飾器的步行路徑
我試圖在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
但你實際上並沒有在'wrapper'中返回任何東西...... – uhz
你不會在'countL'中返回任何東西... – mgilson
我試圖提供一個有用的例子,但我不能告訴你實際上是想從這個問題。我想你應該給出一個或兩個目錄結構的例子,其中的文件和你想要生成的輸出。 – senderle