我试图弄清楚如何从 optparse 传递可选参数。我遇到的问题是,如果未指定 optparse 选项,它默认为 None 类型,但如果我将 None 类型传递到函数中,它会对我大喊大叫,而不是使用默认值(这是可以理解且有效的)。
conn = psycopg2.connect(database=options.db, hostname=options.hostname, port=options.port)
问题是,如何使用函数的默认值作为可选参数,但如果有输入而不需要大量 if 语句,仍然传入用户输入。
最佳答案
定义一个函数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)
关于python - 从 optparse 传递可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11661246/