可选但有条件的参数python

时间:2012-07-26 17:16:50

标签: python arguments

所以,假设我有一个函数需要两个参数,但至少应该有一个参数:

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

问题是它们都是可选的,但实际上会传入foobar。 现在我在这个函数中检查是否存在:

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

但我不喜欢这种样子。

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

4 个答案:

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