LoginSignup
33
24

More than 5 years have passed since last update.

備忘録: Python の関数定義で引数に * (アスタリスク) だけ指定の意味

Last updated at Posted at 2017-01-22

たまにしかコーディングしないとすぐに忘れちゃう。

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

「アスタリスク」といちいち書くのは検索用。
自分自身がこの投稿をした事実を忘れてしまったときのために。

33
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
24