Pythonで可変長引数のメソッドしか用意されていないものの、処理上は配列にしてパラメータを渡すしかないことがあります。
今回の記事では、配列を可変長引数に渡せるようにする方法を残します。
環境
- Python
- 3.9
方法
配列の変数に対して*
を付与すると、可変長引数のメソッドにパラメータを渡せます。なお、これを位置引数(positional argument)と呼びます。
print([x for x in range(10)]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(*[x for x in range(10)]) # 0 1 2 3 4 5 6 7 8 9
類似としてはキーワード引数(keyword argument)があり、Python使用している人であれば、キーワード引数を積極的に使用していると思われます。
ユースケース
- for文では解決できず、可変長引数で渡すしかない
別の方法があるかもしれませんが、sqlalchemy
で複合条件を使用したい時に使用しました。
# SQLでいうと、AとBの複合条件で検索したい # (A, B) IN ((?, ?), (?,?)...) # AND((A.A AND B.B) OR (A.A AND B.B)...) .where(and_( or_( *[and_( DB.A == data.A, DB.B == data.B ) for data in datum] ) ))
ソースコード
なし。
終わりに
基本的にはFor文で対応できることが多いので、方法を知るまで地味に苦労しました。配列に詰めるまではいいものの、そこから位置引数として渡す方法が分からず…。検索キーワードも思いつきませんでしたしね。
積極的には使用しないと思いますが、他の人の参考になれば幸いです。