たまにしかコーディングしないとすぐに忘れちゃう。
Python の関数定義で引数に * (アスタリスク)が1個だけ指定されているときがある(標準ライブラリのソースとか見てるとちょいちょいある):
def connect_accepted_socket(self, protocol_factory, sock, *, ssl=None):
これは、
“*” や “*identifier” の後の引数はキーワード専用引数で、キーワード引数を使ってのみ渡されます。
すなわち *,
をはさむと、それよりあとの引数は「キーワード引数としてでないと受け付けない」(位置引数では受け付けない)ということ。
>>> def foobar(a, b, *, c=False):
... print(a if c else b)
...
>>> foobar(1, 2)
2
>>> foobar(1, 2, c=True)
1
>>> foobar(1, 2, True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: foobar() takes 2 positional arguments but 3 were given
「アスタリスク」といちいち書くのは検索用。
自分自身がこの投稿をした事実を忘れてしまったときのために。