11.1 無限の数のパラメータ
Pythonでは、関数が無限のパラメータを受け取るように設計することができるよ。
これは、通常のパラメータには*args
、名前付きパラメータには**kwargs
を通して渡すことで実現できる。
*args
の使い方
*args
を使うと、関数が任意の数の位置引数を受け取ることができ、
それをタプルとして扱うことができるんだ。使用例は以下の通り:
def print_all(*args):
for item in args:
print(item)
print_all(1, 'apple', True) # 1、apple、Trueと出力される
変数args
は、その関数を呼び出したときに渡された全ての引数を持つタプルになるんだ。
**kwargs
の使い方
**kwargs
も*args
と同様に動作するけど、名前付き引数に対しては辞書として扱われるんだ。
これにより、関数が任意の数の名前付き引数を受け取ることができるよ:
def print_named_items(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_named_items(fruit='apple', number=1) # fruit: apple と number: 1 が出力される
これらのメカニズムは、事前に数が未知のパラメータを扱うAPIやイベント処理関数の開発において、 関数を非常に柔軟かつ便利にしてくれるんだ。
これらのケースについては後ほど詳しく見ていくけど、Pythonなら関数内で渡された全ての 引数に簡単にアクセスできることを覚えておいてね。関数に何でも渡せるよ。
11.2 型の指定
知ってると思うけど、Pythonでは変数に予め型が指定されてないんだ。どんな型の値でも 変数に代入できるし、次の行で新しい型の値に代入することもできる。
小さなプログラムにはすごく便利だけど、大規模なプログラムではあまり便利じゃないね。 大きなプログラムでは、関数の数が何千にもなるとプログラマーがどのデータをどの順序で 関数に渡すべきか覚えられないよね。
静的型付き言語では、IDE自身がプログラマーに関数の呼び出しでどんなパラメータと型を 渡すべきかを教えてくれるんだ。でもPythonは動的型付き言語だから、そういったヒントは どこからも現れないんだ。
だから、Pythonの開発者はtype hinting
というものを考え出したんだ。
これは変数の型のようなもので、型というよりはむしろ推奨事項みたいなものだよ。指定された
型に制約はないんだ。
型の指定はPython 3.5で導入されて、PEP 484標準のおかげで人気が出たんだ。これはプログラマに 期待される変数、引数、そして戻り値の型を定義させるメカニズムだよ。
Pythonは動的型付き言語であるにもかかわらず、型の指定は明確さを増し、静的型検査を サポートする。型の指定の例は以下:
def add_numbers(a: int, b: int) -> int:
return a + b
変数の型はコロンで、そして関数の戻り値の型は矢印で示すんだ。
型の推奨を指定することで得られる利点:
- ドキュメントの改善: 明示的な型指定でコードが自己文書化される。
- より良いオートコンプリート: コードエディタが型情報を使って オートコンプリートを改善してくれるよ。
- デバッグの助け: 静的型検査がプログラム実行前に潜在的なエラーを 発見してくれる。
型作業のためのツール
Python自身は変数の型を宣言しても何も反応しないよ。その代わりに、Pythonには 特別なユーティリティであるmypyがある。これは、型の指定を使用するコードの エラーを捕捉するのに役立つ人気のある静的型解析ツールだよ。
GO TO FULL VERSION