スポンサーサイト

-------- --:--:-- --

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Python】関数の引数について

2012-03-23 00:13:48 Fri

パイソニストには当たり前のことですが、関数がとる引数のアスタリスクについてメモ。

あ、どうでもいいことですが、2012/03/23 現在、
IntellijIDEAのプラグインでpythonとrubyってpythonの2倍近くrubyがDLされていてびっくりしました。
rubyが10万DL、pythonが5万とかでした。
pythonの方がpydevなどIDEが多いからなのかそれとも…と色々邪推してしまいました。
というのは置いといて…。


下記の先人の知恵を借りれればたいていわかります。

http://jutememo.blogspot.jp/2008/09/python_13.html
http://d.hatena.ne.jp/eth0jp/20100219/1266526197
http://www.daisaru11.jp/blog/python-%E3%83%A1%E3%83%A2/%E9%96%A2%E6%95%B0%E5%BC%95%E6%95%B0%E3%81%AE%E5%8F%97%E3%81%91%E6%B8%A1%E3%81%97/

簡単に。


def hoge(*args):
pass

hoge(1,2,3,4,5,6,7,8,9,'a','b','c')



アスタリスク1つはタプルとして可変長引数を受け取るという意味。


def hoge(**args):
pass

hoge(a=1,b=2,c=3)



アスタリスク2つはdictionaryとして可変長引数を受け取るという意味。


def hoge(*args, **dict):
pass

hoge(1,2,3,4,5,6,7,8,9,'a','b','c',a=1,b=2,c=3)



こういう引数の場合は、1~cまでがargsに、{a:1,b:2,c:3}がdictに代入されて関数が実行されます。


def hoge(*args, **dict):
pass

hoge(1,2,3,4,5,6,7,8,9,'a','b','c',a=1,b=2,c=3,0,10,11,12,'d')



じゃあこれはどうなるかというと


SyntaxError: non-keyword arg after keyword arg



になります。

そりゃまあ仕方ない。

a=1のような keyword arg(キーワード引数)の後にnon-keyword arg(ノンキーワード引数)を指定することはできない言語仕様だからのようです。

そりゃそっか。

あ、先人様がおまけで書いてくれていましたが、zipメソッド便利~。


a = (1, 2, 3)
b = (4, 5, 6)
zipped = zip(a,b)
print zipped #[(1, 4), (2, 5), (3, 6)]

a2, b2 = zip(*zipped)
print a2 #(1, 2, 3)
print b2 #(4, 5, 6)


スポンサーサイト

⇒comment

Secret

名言集
全記事(数)表示
全タイトルを表示
ブログ内検索
Loading
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。