「コピペ」はエンジニアの敗北宣言だと思え。
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回(第4回)は、繰り返し処理(ループ)を使って、大量のデータを一瞬で処理する方法を学びました。
これで、あなたのプログラムは強力なパワーを手に入れました。
しかし、学習が進むにつれてコードが長くなり、こんな悩みが出てきていませんか?
- 「同じような処理を何度も書いている気がする…」
- 「コードが100行を超えて、どこで何をしているか読みづらい…」
- 「別のファイルで作ったプログラムを、こっちでも使いたい…」
これらを解決する魔法が「関数(Function)」と「モジュール(Module)」です。
プロのエンジニアは、決して同じコードを何度も書きません。
処理を「部品」として作り、それをパズルのように組み合わせることで、巨大なシステムを構築しているのです。
先生、VPSにログインしました!
関数って数学の $y = f(x)$ みたいなやつですよね?
難しそうですけど、これを使わないとやっぱりダメですか?
コピペの方が楽な気がするんですけど…。
コピペは最初は楽だけど、後で地獄を見るのよ。
もしコピペした10箇所全部にバグが見つかったら、10箇所全部修正するの?
関数にしておけば、1箇所直すだけで全部直るの。
これを「DRY原則(Don’t Repeat Yourself)」と言って、エンジニアの鉄則なのよ!
本記事では、Python初心者にとって最適な勉強方法である「実機(VPS)でのコーディング」を通して、関数とモジュールの仕組みを完全にマスターします。
🚀 【全8回】Python VPSマスターコース カリキュラム
- 【第1回】環境構築とHello World:AlmaLinux 9でPythonを動かす
- 【第2回】変数とデータ型:コンピュータにおける「データ」の扱い方
- 【第3回】条件分岐(if文):プログラムに「判断」させる
- 【第4回】繰り返し処理(for/while):コンピュータの得意技「ループ」
- 【第5回】関数とモジュール(今回):コードを部品化して再利用する
- 【第6回】外部ライブラリの活用(pip):便利な道具をインターネットから入手する
- 【第7回】ファイル操作とWebアクセス:ログ保存とデータ収集
- 【第8回】自動化システム構築:定期実行(Cron)でボットを作成する
目次
1. 関数の基本:入力・処理・出力
関数とは、一言で言えば「特定の処理をひとまとめにした魔法の箱」です。
この箱には以下の3つの要素があります。
| 要素 | Python用語 | 説明 |
|---|---|---|
| 入力 | 引数(Arguments) | 関数に渡す材料。データを受け取る変数。 |
| 処理 | 関数本体 | 受け取ったデータを使って計算や表示を行う。 |
| 出力 | 戻り値(Return Value) | 処理結果として呼び出し元に返すデータ。 |
Pythonでは def というキーワードを使って関数を定義(作成)します。
2. 実践:VPSで関数を作ってみよう
それでは、VPS(AlmaLinux 9)に接続して、実際にコードを書いてみましょう。
前回の続きから作業します。
2-1. 仮想環境の有効化
作業用ユーザー(python_user)でログインし、仮想環境に入ります。
cd ~/python_study source .venv/bin/activate
2-2. 基本的な関数の作成
挨拶をするだけのシンプルな関数を作ります。vi basic_func.py を作成し、以下のコードを入力してください。
# 関数の定義 (definition)
def greet(name):
# name は引数(ひきすう)
print(f"こんにちは、{name}さん!")
print("今日もPython学習頑張りましょう!")
# メイン処理
print("--- プログラム開始 ---")
# 関数の呼び出し (call)
greet("コウ君")
greet("リナックス先生")
print("--- プログラム終了 ---")
実行結果:
--- プログラム開始 --- こんにちは、コウ君さん! 今日もPython学習頑張りましょう! こんにちは、リナックス先生さん! 今日もPython学習頑張りましょう! --- プログラム終了 ---
たった1行 greet("名前") と書くだけで、定義した2行の処理が実行されました。
これが「再利用」の基本です。
2-3. 戻り値(return)のある関数
次は、計算結果を「返す」関数です。vi calc_func.py を作成します。
def tax_calc(price, tax_rate):
"""
価格と税率を受け取り、税込価格を返す関数
"""
result = price * (1 + tax_rate / 100)
return int(result) # 計算結果を呼び出し元に返す
# 関数の結果を変数で受け取る
price1 = tax_calc(1000, 10)
price2 = tax_calc(500, 8)
print(f"1000円の税込(10%): {price1}円")
print(f"500円の税込(8%): {price2}円")
実行結果:
1000円の税込(10%): 1100円 500円の税込(8%): 540円
return を使うことで、関数の中で計算した結果を、関数の外で別の処理(ここでは print)に使うことができます。
3. スコープの概念:変数の有効範囲を知る
関数を使う上で、初心者が必ずハマるのが「スコープ(有効範囲)」です。
関数の中で作った変数は、関数の外では使えません。
実験:エラーになるコード
vi scope_test.py を作成します。
def my_func():
secret_msg = "これは秘密です" # ローカル変数
print("関数の中:", secret_msg)
my_func()
# 関数の外からアクセスしようとする
print("関数の外:", secret_msg)
実行結果(エラー):
関数の中: これは秘密です NameError: name 'secret_msg' is not defined
「secret_msg なんて名前の変数は定義されていないよ」と怒られます。
関数内の変数は「ローカル変数」と呼ばれ、関数の処理が終わるとメモリから消滅します。
逆に、関数の外で定義した変数は「グローバル変数」と呼ばれ、どこからでも参照できます。
プロの助言:
グローバル変数は便利ですが、どこで書き換えられたか追跡できなくなるため、実務では極力使わず、引数と戻り値でデータの受け渡しを行うのが鉄則です。
4. モジュール:ファイルを分割して管理する
プログラムが数百行になってくると、1つのファイルに書くのは管理が大変です。
機能ごとにファイルを分け、必要な時に読み込んで使う仕組みを「モジュール」と言います。
4-1. モジュールファイルの作成
便利な計算機能をまとめた tools.py を作ります。
# tools.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
# テスト実行用のブロック(後述)
if __name__ == "__main__":
print("これは tools.py のテストです")
print(add(10, 5))
4-2. モジュールを読み込んで使う
メインのプログラム main.py を作ります。
同じディレクトリにある tools.py を import して使います。
# main.py
import tools # tools.py を読み込む
print("メイン処理を開始")
# tools.関数名 で呼び出せる
result = tools.add(100, 200)
print(f"計算結果: {result}")
4-3. 実行と確認
python main.py
実行結果:
メイン処理を開始 計算結果: 300
tools.py の中に書いた "これは tools.py のテストです" が表示されていないことに注目してください。if __name__ == "__main__": という書き方は、「このファイルが直接実行された時だけ実行する」という意味です。
importされた時は実行されないため、モジュールの動作確認コードを書くのに使われます。
5. プロのノウハウ:型ヒントとdocstring
Pythonは型を書かなくても動きますが、大規模開発では「この引数は数字?文字?」と迷うことが多々あります。
現代のPython開発では、「型ヒント(Type Hints)」を書くのが標準的です。
型ヒント付きの関数
def power(base: int, exponent: int) -> int:
"""
累乗を計算する関数
Args:
base (int): 底
exponent (int): 指数
Returns:
int: 計算結果
"""
return base ** exponent
base: int: 引数baseは整数であることを期待する。-> int: 戻り値は整数であることを期待する。"""...""": docstring(ドックストリング)。関数の説明書。
これを書いておくと、VS Codeなどのエディタが補完を効かせてくれたり、チームメンバーがコードを読みやすくなったりします。
自分自身のためにも、ぜひ書く癖をつけてください。
6. 演習問題:BMI計算ツールの部品化
第2回で作った「BMI計算機」を、関数とモジュールを使ってリファクタリング(作り直し)してみましょう。
【課題】
health_utils.pyというモジュールを作成する。- そこに
calculate_bmi(height_cm, weight_kg)という関数を定義する。 app.pyからその関数を呼び出し、結果を表示する。
解答例
health_utils.py
def calculate_bmi(height_cm: float, weight_kg: float) -> float:
"""
身長(cm)と体重(kg)からBMIを計算する
"""
# cmをmに変換
height_m = height_cm / 100
# BMI計算
bmi = weight_kg / (height_m ** 2)
return bmi
app.py
import health_utils
# ユーザー入力(今回は固定値)
h = 170.5
w = 65.0
# モジュールの関数を利用
my_bmi = health_utils.calculate_bmi(h, w)
# 結果表示 (小数点1桁)
print(f"身長: {h}cm, 体重: {w}kg")
print(f"BMI: {my_bmi:.1f}")
実行結果:
身長: 170.5cm, 体重: 65.0kg BMI: 22.4
処理ロジック(計算式)と、メイン処理(入出力)をきれいに分けることができました!
まとめ:スパゲッティコードからの卒業
お疲れ様でした! 第5回では、プログラムを整理整頓する「関数」と「モジュール」について学びました。
今回の達成項目:
defを使って関数を定義し、処理を再利用できるようになった。- 引数と戻り値を使って、データの受け渡しができた。
- ローカル変数とグローバル変数の違い(スコープ)を理解した。
importを使って、別ファイルのコードを利用できるようになった。if __name__ == "__main__":の意味を理解した。- 型ヒントとdocstringを使って、読みやすいコードを書く作法を知った。
これで、Pythonの基本的な文法(変数、if、for、関数)は一通り網羅しました。
次回からは、いよいよPythonの真骨頂である「外部ライブラリ」の世界に飛び込みます。
世界中の天才たちが作った便利なツールを、コマンド一発で取り込んで使う方法を学びましょう。
次回、【第6回】外部ライブラリの活用(pip):便利な道具をインターネットから入手する でお会いしましょう!
🔗 参考リンク(公式サイト)
▼ Pythonを学ぶならVPSで ▼
AlmaLinuxが使える
「おすすめVPS」
Pythonスキルを活かす
「ITエンジニア転職」


コメント