1. はじめに|型のないPythonで「型」を使う意味とは?
Pythonは「動的型付け」と呼ばれるプログラミング言語です。これは、変数を使うときに**「この変数は整数です」や「これは文字列です」といった宣言をしなくても使える**という特徴があります。
たとえば、こんなふうに書けます。
price = 100 # 整数
name = "りんご" # 文字列
とっても自由で、初心者にもやさしいですね!
でも、プログラムが大きくなってくると、**「この変数ってどんな型だったっけ?」**と分かりにくくなることがあります。また、意図しない型の値を使ってしまって、**バグ(エラーのもと)**が起きることも…。
そこで便利なのが「タイプアノテーション(型ヒント)」です!
型ヒントを使うことで、こんなメリットがあります:
- この関数にどんなデータを渡せばいいのか一目で分かる
- 間違った型のデータを渡したときに、エディタが警告してくれる
- チームで書くときにも、コードの意図が伝わりやすくなる
また、関数の引数にデフォルト値を設定することで、呼び出し時に省略できる引数を作ることもできます。これも、Pythonのコードをより使いやすく、分かりやすくするための工夫なんです。
この記事では、初心者の方でもわかるように、
- 関数の引数にデフォルト値を設定する方法
- 型ヒント(タイプアノテーション)の使い方
を、やさしく・ていねいに解説していきます!
それでは、まずはデフォルト引数について見ていきましょう!
2. 関数の引数にデフォルト値を設定する方法
関数を使うとき、よく「引数(ひきすう)」というものを渡しますよね。たとえば、商品の値段と個数を渡して、合計金額を計算する関数を考えてみましょう。
def total_price_one_item(unit_price, quantity):
return unit_price * quantity
この関数を使うには、こんなふうに2つの値を渡さないといけません。
print(total_price_one_item(100, 2)) # → 200
でも、「quantity(個数)」がいつも1個の場合もありますよね?
そんなとき、いちいち「1」と書くのが面倒だったりします。
そこで便利なのが、**デフォルト値(あらかじめの値)**です!
✅ デフォルト値をつけるとどうなる?
関数の引数にデフォルト値をつけると、その引数を渡さなくてもOKになります。
書き方はとっても簡単です!
def total_price_one_item(unit_price, quantity=1):
return unit_price * quantity
このように書いておくと、quantity を指定しなかった場合は、自動で 1 が使われます。
print(total_price_one_item(120)) # quantity を省略 → 120 * 1 = 120
print(total_price_one_item(120, 3)) # quantity を指定 → 120 * 3 = 360
✅ 引数名を指定して呼び出す方法
引数が多い関数では、どの値が何に対応してるのか分かりづらくなることもあります。
そんなときは、「引数名」を指定して呼び出すこともできます!
print(total_price_one_item(unit_price=150, quantity=2)) # → 300
print(total_price_one_item(quantity=2, unit_price=150)) # 順番を逆にしてもOK
⚠️ デフォルト値のルールに注意!
1つ注意してほしいことがあります。
デフォルト値をつけた引数のあとに、デフォルト値がない引数を書くとエラーになります。
たとえば、これは間違いです:
# ❌ エラーになる書き方
def wrong_example(quantity=1, unit_price):
return unit_price * quantity
Pythonは、後ろから順番にデフォルト値をつけていくルールになっています。
✅ デフォルト値がないとエラーになる場合
逆に、デフォルト値を設定していない引数を省略してしまうとエラーになります。
def greet(name):
print(f"こんにちは、{name}さん!")
greet() # ❌ エラー! name がないよ!
この場合は name にデフォルト値をつけるとエラーが出なくなります。
def greet(name="ゲスト"):
print(f"こんにちは、{name}さん!")
greet() # → こんにちは、ゲストさん!

次は、関数に「この引数は〇〇の型ですよ」と教えてくれる「タイプアノテーション」について紹介していきます!
3. タイプアノテーション(型ヒント)の基本
Pythonは「型(データの種類)」をあらかじめ書かなくても動く言語ですが、実はどんな型を使うかを「ヒント」として書いておくこともできるんです。
このヒントのことを、「タイプアノテーション」とか「型ヒント」と呼びます。
✅ 型ヒントってなに?
型ヒントとは、この変数にはこういうデータが入りますよ!という目印です。
たとえば、価格や数量は「整数(int)」、名前は「文字列(str)」というふうに、使う型をはっきりさせることで、プログラムが読みやすくなったり、ミスに気づきやすくなったりします。
✅ 書き方の基本
関数で使うときの型ヒントの書き方はこちら:
def total_price_one_item(unit_price: int, quantity: int) -> int:
return unit_price * quantity
この例では、
unit_priceは整数(int)quantityも整数(int)- 戻り値(return の結果)も整数(
int)
という意味になります。
✅ 型ヒントとデフォルト値は一緒に書ける
もちろん、デフォルト値と型ヒントを同時に使うこともできます。
def total_price_one_item(unit_price: int, quantity: int = 1) -> int:
return unit_price * quantity
このようにすると、「quantity は整数で、指定がないときは 1 にしますよ」という意味になります。
✅ 戻り値がない場合は「None」
戻り値(return の結果)がない関数では、こう書きます:
def greet(name: str) -> None:
print(f"こんにちは、{name}さん!")
ここでの -> None は、「この関数は何も返さないですよ」という合図です。
✅ よく使う型ヒント
| 型 | 説明 | 使い方の例 |
|---|---|---|
int | 整数 | 100, -5, 0 |
float | 小数 | 3.14, 0.5 |
str | 文字列 | “こんにちは”, ‘Python’ |
bool | 真偽値 | True, False |
List[int] | 整数のリスト | [1, 2, 3] |
Dict[str, int] | 文字列をキーにした辞書 | {“りんご”: 100} |
Tuple[str, int] | タプル(組) | (“りんご”, 100) |
💡 List, Dict, Tuple などを使うときは、最初に以下のようにインポートしておく必要があります。
from typing import List, Dict, Tuple
⚠️ 型ヒントは「目印」だけ!強制力はない
大事なポイントですが、型ヒントはあくまで「説明」や「目印」でしかありません。
たとえ違う型の値を渡しても、Pythonはエラーにしないことが多いです。
def total_price(unit_price: int, quantity: int) -> int:
return unit_price * quantity
print(total_price("100", 2)) # ❌ 実行できるけど、意図しない動きになるかも
このように unit_price に文字列 "100" を渡してしまうと、Pythonは文字列の繰り返しとみなして "100100" という文字列を返してしまいます。
「型ヒント通りに使おうね!」という約束ごとを、開発者どうしで守るためのしくみと思っておきましょう。
✅ 型ヒントを使うと何がうれしいの?
- 関数の使い方がすぐに分かる
- 他の人が読んでも意味が伝わりやすい
- 間違った使い方をすると、エディタが教えてくれる(PyCharmやVS Codeなど)
- バグが起こりにくくなる!
4. 実行時の挙動と注意点
ここまでで、**型ヒント(タイプアノテーション)**の書き方やメリットを見てきました。でもちょっと不思議に思いませんか?
「型ヒントを書いてるのに、まちがった型を渡してもエラーにならないのはなぜ?」
実はここが、Pythonの「やさしいけどちょっと注意が必要なポイント」なんです。
✅ 型ヒントは“目印”だけ!強制力はない
Pythonでは、型ヒントをつけてもその通りの型じゃなくても動いてしまうことがあります。
たとえば、こんな関数があったとします:
def total_price(unit_price: int, quantity: int) -> int:
return unit_price * quantity
ここで、まちがって unit_price に文字列 "100" を渡すとどうなるでしょう?
print(total_price("100", 2)) # 実行できるけど...
実行してみると、なんと結果は:
100100
あれ?エラーじゃないの?と思いますよね。
実はPythonは、
"100"(文字列) ×2(整数)="100100"(文字列が2回くり返される)
というふうに動いてしまうんです。
つまり、Pythonは柔軟すぎて、まちがった型でも動いてしまうことがあるんですね。
⚠️ 型をまちがえると、変な動きになることがある!
型ヒントがあっても、Python自身は「これはまちがってるよ!」とは言ってくれません。
でも、型がちがうと想定外の動きになってバグの原因になることがあります。
たとえば、合計金額を出すつもりだったのに、文字列がくり返されたり…
def total_price(unit_price: int, quantity: int) -> int:
return unit_price * quantity
print(total_price("100", 3)) # → "100100100"
これではおかしな結果になってしまいますよね。
✅ 型チェックにはエディタの補助機能が便利!
PyCharmやVS Code などの高機能なエディタでは、型ヒントに合っていない使い方をすると、「この型は合ってないよ!」と警告してくれる機能があります。
# 例:VS Codeでの警告(赤い波線で表示)
total_price("100", 2) # ⚠️ unit_price は int なのに str が渡されてますよ
こういった警告をヒントにして、まちがいを早めに見つけることができるのも、型ヒントのいいところです。
✅ チェックを厳しくするツールもあるよ
Pythonでは、型チェックをもっとしっかりやりたいときに使えるツールもあります。
- mypy(マイパイ)というツールを使うと、プログラム全体の型チェックができるようになります。
- コマンドで
mypy ファイル名.pyと打つと、型のミスを自動でチェックしてくれます!
たとえば:
mypy my_script.py
こうすれば、Pythonでも型のミスを見つけやすくなるんです。
✅ 覚えておきたいまとめ
| ポイント | 説明 |
|---|---|
| 型ヒントは目印だけ | 実行時には強制されない |
| 型がちがっても動くことがある | でもバグの原因になることも… |
| エディタが警告してくれる | PyCharmやVS Codeを使うと便利 |
| mypyなどのチェックツールもある | 本格的な開発で使われることが多い |
5. まとめ|可読性と安全性が一気にアップ!
この記事では、Pythonの関数で使える2つの便利なテクニック、
- 引数のデフォルト値
- タイプアノテーション(型ヒント)
についてやさしく解説してきました。
✅ デフォルト引数は「省略できるやさしさ」
デフォルト値を設定することで、毎回すべての引数を入力しなくても関数を呼び出せるようになります。
使う側にもやさしく、書くコードもスッキリします。
def greet(name="ゲスト"):
print(f"こんにちは、{name}さん!")
greet() # → こんにちは、ゲストさん!
✅ 型ヒントは「間違いを防ぐ地図」
タイプアノテーションを使うと、「この引数には整数が来るよ!」といったヒントをプログラムに書いておくことができます。
これは実行中には強制されないけれど、間違いに気づきやすくなり、バグを減らすことができます。
def total_price(unit_price: int, quantity: int = 1) -> int:
return unit_price * quantity
✅ 小さな工夫で大きなメリット!
- 関数が使いやすくなる
- コードの意味が伝わりやすくなる
- エディタがミスを教えてくれる
- チームでの開発でも安心して使えるコードになる
これらのテクニックは、Python初心者のうちから使っていくと、あとあととても役に立ちます!
🎓 学びを自分のコードに活かしてみよう!
もし今、自分で書いているPythonの関数があれば、
- よく使う引数にデフォルト値をつけてみる
- 引数や戻り値に型ヒントをつけてみる
といったところからチャレンジしてみましょう!
あわせて読みたい
Pythonの関数や引数についてもっと知りたい方に、この記事とセットで読んでほしい記事をピックアップしました!
- 🔗 【Python入門】可変長引数 *args と **kwargs の使い方をやさしく解説!
┗ 引数の数が決まっていないときに使える、柔軟な関数の作り方を紹介! - 🔗 【Python入門】for文で使える便利関数3選|tqdm・zip・enumerateの使い方と活用例を解説!
┗ for文でのループ処理をもっと見やすく&効率的に! - 🔗 【Python入門】インデントルール完全ガイド|スペースとタブの違いって?
┗ 関数を書くときに必須の「インデント」のルールをしっかり理解しよう。
よくある質問(Q&A)
- Q型ヒントを書かないとダメですか?
- A
いいえ、大丈夫です!
型ヒントは「必須」ではありませんが、書いておくと可読性がアップし、バグも防ぎやすくなります。慣れてきたら少しずつ使っていきましょう。
- Q型ヒントをつけても、まちがった型を渡したらエラーになりますか?
- A
Pythonの実行中にはエラーになりません。
ただし、VS CodeやPyCharmなどのエディタでは警告が表示されて気づくことができます。本格的にチェックしたいときはmypyなどのツールを使うと便利です。
- Qデフォルト値にはリストや辞書を設定しても大丈夫?
- A
注意が必要です!
リストや辞書などのミュータブル(変更できる)な値をデフォルト値にすると、思わぬ動きをすることがあります。その場合は、関数の中でNoneを使って対処する方法がよく使われます。def add_item(item, item_list=None):
if item_list is None:
item_list = []
item_list.append(item)
return item_list







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。