上記でピンとこなかった方には以下が参考になる…かもしれません。
Ren'Pyのドキュメントを見ていてしばしば
「*args, **kwargs」という表記に戸惑うことがあります。
例えば「Show」というアクションをドキュメントで調べると
『Show(screen, transition=None, *args, **kwargs)』と書かれています。
これはRen'Py用語というよりPython用語で、「可変長引数」と呼ばれるようです。
自分もよく分からないまま何となくスルーしていましたが、この機会に改めて確認することにしました。同様の悩みをお持ちの方の参考になれば幸いです。既に似たような記事が他にありましたらすみません…。また、内容はあまり自信が無いので誤りがありましたら申し訳ございません(ご指摘は歓迎です)。
「*args, **kwargs」の意味
まず、あなたが「引数(ひきすう)」という概念を知らないなら
「*args, **kwargs」は無視でOKです。以上!
知らなくてもビンタ令嬢レベルの作品は作れます。
「引数」については過去の記事で言及しているので、気になる方は覗いてみてください。
以下、「引数」をご理解いただいている前提で話を進めます。
「*args, **kwargs」というのは、簡単に言うと
「示している引数以外にもいろいろな引数が取れるよ」という意味だと解釈しています。マニアックなことをしようとしている方にとっては表現の幅が広がったり、かゆいところに手が届くようになったりするのではないかと。
例えば「Show」という、ボタンを押した際などにスクリーンを表示するアクションがあります。
『Show(screen, transition=None, *args, **kwargs)』であれば、
screen(表示したいスクリーンの名前)
transition(スクリーン表示時に使用するトランジション、指定しなければNone)
という引数が取れるのはすぐに分かりますが…他にも様々な引数を取れるようです。
では、どのような引数が取れるのでしょうか。
それはどのように確認できるのでしょうか。
まず、今回例に出したしたアクション「Show」であれば、上記の他に次のような引数を渡すことができます。
例1)「_layer」という引数で、表示するレイヤーを指定できる
screen test_screen():
add "cg00_020"
screen test_button():
textbutton _("表示テスト") action Show("test_screen", _layer="added")
例2)表示するスクリーン側の持つ引数を指定することができる
screen test_screen(im_name):
add im_name
screen test_button():
textbutton _("表示テスト") action Show("test_screen", im_name="cg001")
どのような引数が取れるかは、ドキュメントにヒントがあるようです。
例えば「Show」であれば、ドキュメントの説明に
このアクションは _layer _zorder, _tag をキーワード引数として受け取り、それらは, renpy.show_screen() 関数のものと同じ意味になります。
とあります。
この中の「renpy.show_screen()」のリンクをクリックすると、その先に更にヒントがあります。
「*args」と「**kwargs」の違い
調べると次のような説明が見つかります。
*args: 複数の引数をタプルとして受け取る
**kwargs: 複数のキーワード引数を辞書として受け取る
上記に出てくる「タプル」や「辞書」とは一体何なのか?
これらは、雑に言うとリストの兄弟のようなものと考えてよいかと思います。
(リストって何?という方は過去の記事で紹介していますので覗いてみてください。)
例)
リスト(list): a1 = [1, 2, 3]
タプル(tuple): a2 = (1, 2, 3)
辞書(dict): a3 = {"one": 1, "two": 2, "three":3}
こちらのページにリスト・タプル・辞書の簡単な説明と様々な例が出ています。
「*args」と「**kwargs」はセットで出てくることが多いような気がしますが、片方しかない場合もあります。使える引数や引数の渡し方を知るヒントになる…のかもしれません。
こちらには*args:位置パラメーター、**kwargs:ドキュメントで解説されているキーワード引数、**properties:スタイルプロパティー を受け取るとありますが、自分ではまだ未検証です;
尚、「args」は「arguments」の略、「kwargs」は「keyword arguments」の略のようです。
「augment」という英単語は「増やす」のような意味を持つようです。
今回は以上です。ほぼ自分用メモなので内容に誤りがありましたら申し訳ございません、ご指摘頂けるととても有難いです。