2013-08-26 1 views
5

が再びコーナーに自分自身を学ぶ投げますか? 「通常の」変数と「変数」を混在させることは想定されていないようですが、これを確認したり拒否する人はいません。私はいくつかのタイプの議論が最初に来なければならないということをどこかで読んでいる(そして私は当然見つけられない)、私は問題であるかもしれないし、そうでないかもしれないキーワードの議論を信じている。 **kwargs変数キーワードパラメータは、関数宣言の最後の部分でなければなりませんFUNC(* argsを、** kwargsから、x)をいただきましルールイムここで破っ</p> <pre><code>def superfunction(*args, **kwargs, k): ^ SyntaxError: invalid syntax </code></pre> <p>...無効な構文

def superfunction(k, *args, **kwargs): 

+0

なぜこれが間違っているのかの詳細は、Python 2.xと3.xでは少し異なります。チュートリアルのセクション[キーワードの引数](http://docs.python.org/2/tutorial/controlflow.html#keyword-arguments)および参照セクション[関数の定義](http://docs.python.org/ 2/reference/compound_stmts.html#function)に詳細が記載されています。しかし簡単に言えば、 '**'パラメータの後ろに何も来ることはできません。 – abarnert

+0

私はまた、[blog post](http://stupidpythonideas.blogspot.com/2013/08/arguments-and-parameters.html)を持っています。私は初心者にはやらないとは思っていませんが、リファレンス文書を読むよりも少しでも簡単です。 (しかし、それはPython 3固有のものです。) – abarnert

答えて

13

はこれを試してみてください。最後に、*args可変位置パラメータ。 (Python 3.xのみでは、*args**kwargsの間のキーワードのみのパラメータを持つこともできます)。そして、最初の場所では、位置パラメータが関数パラメータを宣言する正しい方法です。詳細はpostをご覧ください。

詳細については、関数定義セクションのPython 3.xまたはPython 2.xを参照してください。

+1

その名前のないvarsは、vars、*、** – jason

+0

という名前で呼ばれています。 kwargs):私を正しい軌道に乗せてくれてありがとう。 – jason

+0

フォローアップ:def superfunction(k、n = 2、* args、* args2、** kwargs):複数の*型引数を指定すると、構文エラーもスローされます。私はあなたが1つだけ許可されていると思いますか? – jason

4

構文は次のようにする必要があります:

def superfunction(k, *args, **kwargs): 

まず、あなたはすべての位置引数、その後、非キーワード引数、その後、キーワード引数を与えます。

+0

引数とパラメータを間違って取得する以外に...キーワード以外の引数と位置引数は同じものですので、混乱し、間違っています。 – abarnert

+0

正しい順序はposition-or-keyword params、オプションで '* args'(またはPython 3.xのみでは' * ')、次に(Python 3.xでは)keyword-only params、' * * kwargs'。 – abarnert

+0

@abarnertああ!それは...ですか?私は数ヶ月前にそれを読んでいたので、私は専門用語を忘れてしまったため、混乱してしまったようです。それを指摘してくれてありがとう。 –

関連する問題

 関連する問題