0

因此,假设我有一个带有两个参数的函数,但至少应该存在一个:

 def foo_bar(foo = None, bar = None):

问题是它们都是可选的,但实际上要么foobar将被传入。现在我检查函数中是否存在,如下所示:

do_this() if foo else do_that() sort of logic.. 

但我不喜欢这个样子。

处理这个问题的最佳方法是什么?

4

4 回答 4

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()

无论哪种方式都应该没问题。希望这可以帮助

于 2012-07-26T17:22:01.177 回答
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

简单,容易理解。

于 2012-07-26T17:32:14.907 回答
2

想到3种方法来处理它:

如果您可以根据有关参数的某些规则(一种是一种类型,一种是另一种,一种匹配 1 个正则表达式,另一种匹配等)来切换行为,请传递一个参数并确定在函数内部要做什么。

创建 2 个函数,它们都为共享行为调用其他函数,但独立处理 foo 和 bar 特定情况。

传递 1 个数据值和另一个控制值:

def foo_bar(val, control):
    if control=='foo':
        #Do foo stuff
    elif control=='bar':
        #Do bar stuff
于 2012-07-26T17:22:36.417 回答
0

为什么不简单地检查一下哪个是 None,然后说另一个肯定是存在的呢?

if foo == None:
    do bar()
elif bar == None:
    do foo()
else:
    throwUpYourHandsInFrustration()
于 2012-07-26T17:19:52.737 回答