• ベストアンサー

Pythonにて不明な部分

あるPythonコードからの抽出です。 Synset = namedtuple('Synset', 'synset pos name src') def getSynset(synset): print synset x = "select * from synset where synset='" + synset + "';" print x cur = conn.execute(x) return Synset(*cur.fetchone()) このgetSynsetを呼んだ時に、どのような内容が返されるか分かりません。 特に *cur の"*"は機能は何でしょうか。Cならポインタが指す内容ですが、Pythonにポインタは無いと思います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

これ、実はかなり質問の仕方が悪くって(しょーがない部分もありますが)、と言うのも、「抜粋だ」ってのは分かるんですが、Pythonの話なのか何なのかかなり分かりづらいんですね。 大局的にはPythonの話なんですが、言語の問題と言うより使用ライブラリのせいで物凄く分かりづらいんです。 どうも見てるとSQL(データベースの問い合わせ言語)が絡んでるところを見ても、SQLite3か何かのライブラリを使用してるコードなんじゃないでしょうか。そうなるとPythonの問題かどうか切り分けが難しいし、再現して「何を返す」って言いづらいわけです。 それと、Pythonは現在2.7系と3.x系が並列に存在して使われてますんで、どっちを使用してるのか明言するように心がけた方が良いでしょう。 さて、*が何か、と言うのはそれはこちらを見てください。 4.7.4. 引数リストのアンパック: http://docs.python.jp/2/tutorial/controlflow.html#tut-unpacking-arguments つまり、冒頭でSynsetって名前のnamedtuple namedtuple: http://docs.python.jp/2/library/collections.html#collections.namedtuple を定義してるんですが、データベースから返してきた情報をfetchone()メソッドでシーケンス化して、そいつを*演算子でアンパック(要素を展開、と言えば良いんでしょうか)して引数としたnamedtupleであるSynsetを返してる、って事ですね。

remokon
質問者

お礼

返答ありがとうございます "*"の機能が”アンパック”という事が分かりました。 戴いた情報で調べてみます。 不明な点があったら、また質問します。 今後もおねがいします

関連するQ&A

専門家に質問してみよう