1

ですから、この質問をどのように表現すればよいか本当にわかりません。または、グーグルで検索できると確信しています。

次のような機能があります。

def example(parameter1 = "", parameter2 = "", parameter3 =""):
    print(parameter1)
    print(parameter2)
    print(parameter3)

そして、たとえば、次のように 3 回呼び出して、一度に 1 つのパラメーターのみを渡すことができるようにしたいと考えています。

example(parameter1 = "Hello")
example(parameter2 = "Stack")
example(parameter3 = "Overflow")

しかし、私の実際のコードでは、これを大幅に一般化し、より多くのパラメーターを持たせる必要があるため、次の行に沿って何かを実行できるようにしたいと考えています。

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for i in range(3):
    example(paramnames[i] = parameters[i])

これを達成するためのPythonの方法はありますか?

4

4 に答える 4

1

あなたが探しているのは引数パッキング*と呼ばれ、 orを使用**して位置および名前付き引数を示します。

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for name, value in zip(paramnames, parameters):
    example(**{name: value})

def example(parameter1="", parameter2="", parameter3=""):
    print(parameter1)
    print(parameter2)
    print(parameter3)

引数が渡されない場合、それがデフォルトになることに注意してください。したがって、出力は次のとおりです。

Hello



Stack



Overflow
于 2014-02-10T23:28:33.473 に答える
1

adict**表記を使用します。

parameters = {'parameter1': 'Hello',
              'parameter2': 'Stack', 
              'parameter3': 'Overflow'}

for k, v in parameters.items():
    example(**{k: v})

順序を維持する必要がある場合は、OrderedDict

于 2014-02-10T23:29:35.720 に答える
0

そのようなdictを使用しないのはなぜですか:

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for i in range(3):
    example({paramnames[i] : parameters[i]})

と :

def example(para_dict):
    for k,v in para_dict.items():
        print(v)

異なるコードですべてのパラメータを使用したい場合は、「k」でテストできます

于 2014-02-10T23:30:54.810 に答える
0

これを行うにはいくつかの方法があります。

最も簡単な方法は、おそらく、辞書を使用して引数を保持してから、 を使用してすべての引数を関数に渡すことですexample(**param_dict)

より「派手な」アプローチはfunctools.partial、いくつかのパラメーターが事前に指定された呼び出し可能なオブジェクトを使用することです。パラメータを追加して、最後example = partial(example, parameter1="hello")に呼び出すだけです。example()このアプローチは、パラメーターがさまざまな場所から取得され、コールバックのように、パラメーターを使用して関数をしばらく保持する必要がある場合に役立ちます。

于 2014-02-10T23:31:20.017 に答える