所以,假设我有一个函数需要两个参数,但至少应该有一个参数:
def foo_bar(foo = None, bar = None):
问题是它们都是可选的,但实际上会传入foo
或bar
。
现在我在这个函数中检查是否存在:
do_this() if foo else do_that() sort of logic..
但我不喜欢这种样子。
处理此问题的最佳方法是什么?
答案 0 :(得分:4)
我认为你做得对。也可以使用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()
无论哪种方式都应该没问题。希望这有帮助
答案 1 :(得分:2)
有三种方法可以解决这个问题:
如果你可以根据一些关于参数的规则来切换行为(一个是一种类型,一种是另一种,一种匹配1种正则表达式,另一种是另一种,等等),传递一个参数并找出函数内部要做的事情
创建2个函数,这些函数既为其共享行为调用其他函数,又独立处理foo和bar特定情况。
传递1个数据值和另一个控制值:
def foo_bar(val, control):
if control=='foo':
#Do foo stuff
elif control=='bar':
#Do bar stuff
答案 2 :(得分:2)
你是在正确的轨道上,但如果两者都被指定怎么办?我通常做的是:
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 :(得分:0)
为什么不直接检查哪一个是无,并说另一个必须是那个?
if foo == None:
do bar()
elif bar == None:
do foo()
else:
throwUpYourHandsInFrustration()