1

タプルの後に2つのキーワード引数が1回または数回続き、その後に他のキーワード引数が続くメソッドを作成したいと思います。例えば:

funct(data_1, x='x_val', y='y_val', data_2, x='x_val', y='y_val',
data_3, x='x_val', y='y_val', other_args='other_args_val')

また

funct(data_1, x='x_val', y='y_val', data_2, x='x_val', y='y_val',
data_3, x='x_val', y='y_val')

また

funct(data_1, x='x_val', y='y_val')

また

funct(data_1, x='x_val', y='y_val', other_args='other_args_val')

data_1、data_2、data_3 がタプルである有効な呼び出しになります。

4

3 に答える 3

3

任意の数のキーワード引数を受け入れる関数を作成できます。

def foo(**kwargs):
    pass

ご覧のとおり、これではやりたいことができません。

foo(x=None, x=None)
#>>> Traceback (most recent call last):
#>>>   File "<string>", line 73, in <module>
#>>>   File "/usr/lib/python3.3/ast.py", line 35, in parse
#>>>     return compile(source, filename, mode, PyCF_ONLY_AST)
#>>>   File "<unknown>", line 4
#>>> SyntaxError: keyword argument repeated

唯一の選択肢は、新しい入力メカニズムを作成することです。私は提案しdata, dictionary, data, dictionary, data, dictionary, ...ます:

def funct(*args):
    ...

funct(
    data1, {"x": "x_val", "y": "y_val"},
    data2, {"x": "x_val", "y": "y_val"},
    data3, {"x": "x_val", "y": "y_val", "other_args": "other_args_val"}
)

または、クラス インスタンスを受け入れることもできます (可能な場合namedtuple):

funct(
    Data(data1, x="x_val", y="y_val"),
    Data(data2, x="x_val", y="y_val"),
    Data(data3, x="x_val", y="y_val", other_args="other_args_val")
)
于 2013-09-24T13:32:22.567 に答える
1

これは Python では不可能です。キーワード引数は dict に渡されるため、一意である必要があります

于 2013-09-24T13:25:51.350 に答える