こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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にポインタは無いと思います。

投稿日時 - 2014-12-17 09:30:40

QNo.8861114

暇なときに回答ください

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

これ、実はかなり質問の仕方が悪くって(しょーがない部分もありますが)、と言うのも、「抜粋だ」ってのは分かるんですが、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を返してる、って事ですね。

投稿日時 - 2014-12-17 12:42:56

お礼

返答ありがとうございます


"*"の機能が”アンパック”という事が分かりました。
戴いた情報で調べてみます。

不明な点があったら、また質問します。

今後もおねがいします

投稿日時 - 2014-12-17 15:41:53

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問