定義一個函數remove_none_values
能過濾一個字典沒有值的參數。
def remove_none_values(d):
return dict((k,v) for (k,v) in d.iteritems() if not v is None)
kwargs = {
'database': options.db,
'hostname': options.hostname,
...
}
conn = psycopg2.connect(**remove_none_values(kwargs))
或者,定義一個函數包裝器,在將數據傳遞到原始函數之前刪除沒有值。
def ignore_none_valued_kwargs(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
newkwargs = dict((k,v) for (k,v) in d.iteritems() if not v is None)
return f(*args, **kwargs)
return wrapper
my_connect = ignore_none_valued_kwargs(psycopg2)
conn = my_connect(database=options.db, hostname=options.hostname, port=options.port)
謝謝,這確實起作用。我希望有一個更少的黑客攻擊方式,而不是一個字典和刪除None類型。 – Kyo 2012-07-26 17:31:30