1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1つ以上の引数を受け取る可変長引数

Posted at

python の 可変長引数, variable length argument は引数が省略され得る。

def func1(*items):
    return items


assert func1() == tuple()

引数が省略されると困る場合は、引数が省略された場合に TypeError() を送出するなどの実装を検討する。

def func2(*items):
    if len(items) > 0:
        return items
    else:
        raise TypeError("At least one argument required.")


func2()
-> TypeError

確かにfunc2 は安全になったが、Runtime error が送出されるまで引数が省略されたことが分からない。そこで、以下のように実装すると、1つ以上の引数を強制できる。(Syntax error

def func3(item, *items):
    return (item, ) + items

なお、itertools.chain を使うと効率的にできる。

from itertools import chain


def func4(item, *items):
    return tuple(chain((item, ), items))

いずれの実装でも1つ以上の引数をとる場合には同じ出力になる。もし、引数の省略を許さないなら、func1 よりも func3func4 がやさしい。

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?