2010-07-19 63 views
9

此刻我的Python代碼通常是這樣的:幹運行方法?

... 
if not dry_run: 
    result = shutil.copyfile(...) 
else: 
    print " DRY-RUN: shutil.copyfile(...) " 
... 

我現在想想書面方式有點像幹流道方法:

def dry_runner(cmd, dry_run, message, before="", after=""): 
    if dry_run: 
     print before + "DRY-RUN: " + message + after 
    # return execute(cmd) 

但CMD將首先執行,其結果是給予dry_runner方法。

我該如何編碼pythonic這樣的方法?

回答

4

您可以使用此通用包裝函數:

def execute(func, *args): 
    print 'before', func 
    if not dry: 
     func(*args) 
    print 'after', func 

>>> execute(shutil.copyfile, 'src', 'dst') 
4

這不是它的顯示完美,但該功能可以運行。希望這已經足夠清晰了:

dry = True 

def dryrun(f): 
    def wrapper(*args, **kwargs): 
     if dry: 
      print "DRY RUN: %s(%s)" % (f.__name__, 
             ','.join(list(args) + ["%s=%s" % (k, v) for (k, v) in kwargs.iteritems()])) 
     else: 
      f(*args, **kwargs) 
    return wrapper 

import shutil 
copyfile = dryrun(shutil.copyfile) 

copyfile('a', 'b')