2012-10-17 55 views
0

我正在編寫一個程序,按順序執行一組任務。每個任務都是輸出新文件的函數,但如果文件名已存在,則不應執行任何給定的任務。我發現自己寫這種代碼一遍又一遍:修飾器在Python中創建一系列連續的任務?

task1_fname = task1() 
# come up with filename for next task 
task2_fname = "task2.txt" 
if not os.path.isfile(task2_fname): 
    # task2 might depend on task1's output, so it gets task1's filename 
    task2(task1_fname) 
task3_fname = "task3.txt" 
if not os.path.isfile(task3_fname): 
    task3(...) 

的基本想法是,如果一個文件存在(理想情況下非空),那麼你不應該執行生成此文件的任務。

什麼是最好的Pythonic表達方式,而不必每次都要寫os.path.isfile調用?裝飾者可以更簡潔地表達這一點嗎?或沿線的東西:

with task2(task1_fname): 
    # continue to next task 

任何想法?

回答

3

你在找這樣的事嗎?

def preserve_output(f): 
    def wrap(input, output): 
     if not os.path.isfile(output): 
      f(input, output) 
    return wrap 

@preserve_output 
def task1(input, output): 
    ... 

@preserve_output 
def task2(input, output): 
    ... 

task1('input', 'output_1') 
task2('output_1', 'output_2') 
task3('output_2', 'output_3') etc