0

したがって、2つのパラメーターを受け取る関数があるとしましょう。ただし、少なくとも1つは存在する必要があります。

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

問題は、両方がオプションであるということですが、実際にはどちらfoobarが渡されるか、渡されます。今、私は次のような関数に存在するかどうかを確認します。

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

しかし、私はこれがどのように見えるかが好きではありません。

これに対処するための最良の方法は何ですか?

4

4 に答える 4

4

私はあなたがそれを正しく持っていると思います。kwargsparamsは、次の構文で読み取ることもできます。

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

これに対処する3つの方法が思い浮かびます。

パラメータに関するいくつかのルール(1つはあるタイプ、1つは別のタイプ、1つは1つの正規表現に一致する、1つは別のルールなど)に基づいて動作を切り替えることができる場合は、1つのパラメータを渡して、関数内で何をすべきかを理解します。

共有動作のために他の関数を呼び出すが、fooとbarの特定のケースを個別に処理する2つの関数を作成します。

1つのデータ値と別の制御値を渡します。

def foo_bar(val, control):
    if control=='foo':
        #Do foo stuff
    elif control=='bar':
        #Do bar stuff
于 2012-07-26T17:22:36.417 に答える
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 に答える
0

どちらがNoneであるかを単純に確認し、もう1つは存在している必要があると言ってみませんか?

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