2016-11-17 9 views
0

apply()関数とクラスのオブジェクトを使用する関数呼び出しの違いは何ですか?

  • form.nameが文字列
  • 変換が値

次の2行の違いは何ですかのリストを返しているクラスであるアトムを考えてみましょうか?ドキュメントから

  • apply(Atom, [form.name] + list([convert(arg, subst) for arg in list(form.args)]))

  • Atom(form.name, [convert(arg, subst) for arg in form.args])

は 適用(オブジェクト[、引数[、kwargsから]])(...)を適用 - >値
タプルargsから取られた位置引数を持つ呼び出し可能なオブジェクト、 とオプションの辞書kwargsから取られたキーワード引数。 クラスは呼び出し可能であることに注意してください。()メソッドを呼び出すインスタンスもあります。

私は2行の違いを理解できません。私は、Python 3.5で

答えて

2

applyapply(Atom, [form.name] + list([convert(arg, subst) for arg in list(form.args)]))ための同等のコードを見つけようとすると、unpacking argumentsの古い学校方法ですよ。あなたはapplyがもはや存在しないpython3.5で作業しているので

results = apply(foo, [1, 2, 3]) 
results = foo(*[1, 2, 3]) 
results = foo(1, 2, 3) 

、オプションが有効ではありません。つまり、以下のすべての同じ結果が得られます。さらに、引数をリストとして扱っているので、3番目のオプションを実際に使用することもできません。残りの唯一のオプションは2番目です。私たちは簡単に式をその形式に変換できます。 python3.5の等価は次のようになります。

Atom(*([form.name] + [convert(arg, subst) for arg in list(form.args)])) 

それはのpython2.3に廃止されました!

+0

私はそれについて読むことができるように、ここでどの概念が使用されているか教えてください。 Atom(* ...)とは何ですか? *は何を表していますか? –

+0

http://stackoverflow.com/questions/36901/what-does-double-star-and-star-do-for-parameters –

+1

@Dennis - それでは、現代のPythonで引数を解凍する方法です。上記のリンクを上に追加して、パイソンチュートリアル – mgilson

関連する問題