因此,假设我有一个带有两个参数的函数,但至少应该存在一个:
def foo_bar(foo = None, bar = None):
问题是它们都是可选的,但实际上要么foo
或bar
将被传入。现在我检查函数中是否存在,如下所示:
do_this() if foo else do_that() sort of logic..
但我不喜欢这个样子。
处理这个问题的最佳方法是什么?
我认为你做对了。也可以使用以下kwargs
语法读取参数:
def foo(*args, **kwargs):
if 'foo' in args:
do_this()
elif 'bar' in args:
do_that()
else:
raise ValueError()
或者,您可以执行以下操作:
def foo(param, flag):
if flag == 'foo':
do_this()
elif flag == 'bar':
do_that()
else:
raise ValueError()
无论哪种方式都应该没问题。希望这可以帮助
您走在正确的轨道上,但是如果两者都指定了怎么办?我通常做的是:
def some_func(foo=None, bar=None):
"either one, or neither, but not both, are allowed"
if foo is not None and bar is not None:
raise TypeError("cannot specify both 'foo' and 'bar'")
if foo is not None:
pram = foo
elif bar is not None:
pram = bar
else:
pram = None # or whatever
简单,容易理解。
想到3种方法来处理它:
如果您可以根据有关参数的某些规则(一种是一种类型,一种是另一种,一种匹配 1 个正则表达式,另一种匹配等)来切换行为,请传递一个参数并确定在函数内部要做什么。
创建 2 个函数,它们都为共享行为调用其他函数,但独立处理 foo 和 bar 特定情况。
传递 1 个数据值和另一个控制值:
def foo_bar(val, control):
if control=='foo':
#Do foo stuff
elif control=='bar':
#Do bar stuff
为什么不简单地检查一下哪个是 None,然后说另一个肯定是存在的呢?
if foo == None:
do bar()
elif bar == None:
do foo()
else:
throwUpYourHandsInFrustration()