0

タプルなどの非キーワード引数と辞書などのキーワード引数を持つ関数を宣言すると、それらは宣言されますか?

例えば:

def someFunc(a, *nkw, **kwa):
    nkwList = []
    kwList  = []
    for i in nkw:
        nkwList.append(i)
    for j in kwa:
        kwList.append(j)
    print a, nkwList, kwList

入力:

someFunc(1)

出力:

1 [] []

ご覧のとおり、タプルとディクショナリを渡さなかったにもかかわらず、nkw と kwa をループしても Index out of range エラーは発生しませんでした。私の理解では、関数宣言自体に *nkw と **kwa が作成されていると思います。

この概念を理解するのを手伝ってくれる人はいますか?

4

2 に答える 2

1

タプルとディクショナリは、それらが空であっても (つまり、何も渡されていない場合でも)常に作成されます。

于 2012-05-27T10:26:08.000 に答える
1

nkwもちろん、kwa空のリスト/辞書として渡されます。それらに安全にアクセスすることは決してできず、それらが存在するかどうかを常に確認する必要はないため、他のことを行うと、それらの目的に完全に反することになります。

これをデフォルトのパラメータと混同している可能性があります。例えば:

def someFunc(x=[]):
    pass

ここで、デフォルトとして使用されるリストxは、関数の宣言時にインスタンス化されます。したがって、関数のすべての呼び出しで同じです。

于 2012-05-27T10:30:18.267 に答える