プログラミングにおける関数とはどういうもののことでしょうか?
数学でいう関数は、ある値を入れるとある一定の値を返してくるもののことです。ある一定の値とは関数で定義している式によって計算されるものです。
プログラムでも同じように関数を定義して、同じ式(処理)が必要な場合は関数を使います。
似てるものにサブルーチンがありますが、サブルーチンは同じ処理を行うものをひとつだけ定義しておき必要なところで呼び出して使います。関数と違うのは基本的には値を返しません。
プログラミングを行う際に、同じ処理が何度もでてくる場面がありますが、その度にプログラムをコーディングしていては、プログラム自体が長くわかりにくくなります。
これらの処理を簡素にするために、サブルーチンや関数を使うプログラミング言語が考えられました。
近年ではさらにプログラムをわかりやすく、再利用や保守がしやすいようにオブジェクト指向や関数型というプログラム言語が考えられ実用されています。
この記事ではPython関数の基礎から応用までを実際のコード例も紹介しながら分かりやすく説明します。
現役のシステムエンジニアとして10年程度のキャリアがあります。 Webシステム開発を中心に、バックエンドからフロントエンドまで幅広く対応してきました。 最近はAIやノーコードツールも触っています。
Python関数とは?特徴を解説

プログラミング言語であるPythonにも、関数は存在します。関数は自分で定義して使うものと、もともと用意されているものもあります。
Python関数とは、特定のタスクを実行するためにまとめられたコードブロックのことです。
Pythonにはサブルーチンという概念はないので、何度も繰り返しでてくるまとまった処理を定義して関数として使います。
また、自分が作った関数を他の人が使ったり、他人の作った関数を自分が使ったりでき、利便性と保守性が向上します。関数を使うことでコードの再利用性が高まるため、プログラムが簡潔になり、読解性が向上もします。
他にもPython関数には以下のような特徴があります。
- コードの整理ができる
- デバッグが簡単にできる
- コードの再利用ができる
- 読みやすい
以下ではそれぞれについて説明します。
コードの整理ができる
関数を活用する大きなメリットの一つに、コードの整理が容易になる点が挙げられます。
複雑な処理を複数の関数に分割することで、コードの構造が明確になり、理解しやすくなります。
特に大規模なプロジェクトでは、関数を使用してコードを整理することで、保守性と可読性の向上効果が大きくなります。
関数をうまく活用して、誰が見ても分かりやすいコードを実装しましょう。
デバッグが簡単にできる
関数ごとに処理が分割されることで、デバッグ作業の効率化にも繋がります。
各関数は独立した機能を持つため、エラーの原因を特定しやすく、修正も効率的に行えます。
また、関数単位でのユニットテストも実施しやすくなり、コードの品質向上につながります。
コードの再利用ができる
一度定義した関数は、プログラム内の任意の場所で何度でも呼び出して使用できます。
これにより、同じコードを繰り返し書く必要がなくなり、開発時間の短縮とコードの一貫性維持が可能になります。また、バグの発生を抑制する効果もあるといえるでしょう。
さらに、関数をモジュールとしてまとめることで、他のプロジェクトでも再利用できるようになります。特定の業務処理に依存しない共通処理は、関数として定義するのがおすすめです。
読みやすい
適切に設計された関数は、その名前だけで機能が理解できるため、コードの可読性が向上します。
複雑な処理を関数内にカプセル化することで、メインのプログラムフローがシンプルになり、全体の理解が容易になります。
Pythonでは関数にドキュメンテーション文字列(docstring)を付けることができるため、関数の目的や使用方法を明記しておくとよいでしょう。
Python関数の基礎的な使い方

Pythonで関数を使いこなすには、定義方法から呼び出し方、戻り値やパラメータの扱い方まで、基本的な部分をしっかり押さえることが重要です。
ここでは、コード例を交えながら、Python関数の基礎を解説していきます。
関数の定義(def)
Pythonでは、関数を定義するのにdefキーワードを使います。defはdefin(定義する)という言葉から作られています。
関数の作り方は以下のとおりです。引数なしの関数を宣言することもあります。
def 関数名(引数1,引数2,.....):
関数の処理をここに書きます。
return 戻り値
関数の処理を書く部分はインデントをします。インデントとは字下げのことです。
単純に”Hello word”と出力する関数は以下のように書きます。
def greet:
print("Hello World")
また、Pythonの関数では、型指定を利用することで、コードの安全性と可読性を向上させることができます。
型指定とは、関数に渡す引数や関数が返す値に対して、期待するデータ型を明示的に指定することです。
例えば、以下のように-> floatを記述することで、関数が整数を返すことを明示できます。
def calculate_area(length: float, width: float) -> float:
return length * width
型指定を行うことで、型エラーを早期に発見できるだけでなく、他の開発者や未来の自分にとってコードの意図が理解しやすくなるというメリットがあります。
関数の呼び出し
関数はその関数が呼び出されたときに実行されます。
呼び出し元の処理から呼び出し先の関数へと実行が移されて、関数内の処理が行われたあと呼び出し元の処理に戻ってくるという流れです。
以下では、2つの数値を引数でもらって足し算する関数を例に説明します。
def add(a,b):
res = a + b
return res
この関数を呼び出すには、呼び出し側の関数において、関数名と引数を書きます。このとき、関数で定義されている引数より少なくても多くでもエラーになります。
また、例の関数は値を返却するので、呼び出し側ではその値を受け取る(代入する)変数が必要です。なお、値を返さない関数を定義することも可能です。
これらの説明を踏まえて、先ほど定義したadd関数の呼び出し方は以下のとおりです。
これを実行すると、answer には7が入ってきます。
戻り値
呼び出し側で結果が必要な場合、関数の処理の最後にreturn キーワードを使用して指定します。これを通常は戻り値と呼びます。
戻り値がない場合はreturn None と記述することもできますが、通常はreturnを記述しません。
以下は、具体的な例です。
def greet(name):
return f"Hello, {name}!"
# 関数を呼び出し
res = greet("Alice")
print(res)
これを実行すると、”Hello, Alice!”と出力されます。
パラメータ
関数のパラメータには、デフォルト値を設定できます。これにより、引数が省略された場合でも関数を呼び出すことが可能です。
パラメータの例は以下のとおりです。
def power(base, exponent=2):
return base * exponent
print(power(3)) # 出力: 9 (3^2)
print(power(3, 3)) # 出力: 27 (3^3)
上記の例では2つ目の引数として”2″が設定されています。引数を1つしか指定せずに呼び出した場合は、2つ目の引数は2として処理されます。
スコープ
変数のスコープとは、その変数が参照可能な範囲のことです。
Pythonでは、関数内で定義された変数は、その関数内でのみ有効なローカル変数となります。一方、関数外で定義された変数は、プログラム全体で参照可能なグローバル変数となります。
ローカル変数とグローバル変数の例は以下のとおりです。
global_var = "グローバル変数"
def my_function():
local_var = "ローカル変数"
print(global_var) # グローバル変数を参照可能
print(local_var) # ローカル変数を参照可能
my_function()
print(global_var) # グローバル変数を参照可能
# print(local_var) # エラー!ローカル変数は関数外から参照不可
上記のようにローカル変数は関数の外からは呼び出せない点に注意しましょう。
ラムダ関数
ラムダ関数は、関数名を持たない無名関数のことです。一行で簡潔に関数を定義したい場合に使います。
ラムダ関数は以下のような構文で定義します。
ラムダ関数の例は以下のとおりです。
multiply = lambda x, y: x * y result = multiply(4, 7) print(result) # 出力: 28
ラムダ関数は、他の関数を引数として受け取る関数と組み合わせて使われることが多い点も覚えておきましょう。
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # 出力: [2, 4, 6, 8, 10]
Python関数における引数の種類

関数をより柔軟に、そして効果的に使用するためには、引数の概念を深く理解することが重要です。
引数とは、関数に渡す具体的な値のことを指します。関数を呼び出す際に、括弧内に指定する値が引数となり、関数内部で処理に使用されます。
Pythonでは関数の引数にいくつかの種類があり、それぞれ異なる方法で値を渡したり、柔軟な処理を実現したりできます。
ここでは、Pythonで利用できる主な引数の種類について、具体的なコード例とともに解説していきます。
位置引数
位置引数は、関数に定義された順番通りに値を渡す最も基本的な引数です。
def greet(name, greeting):
return f"{greeting}, {name}!"
print(greet("Alice", "Hello")) # 出力: Hello, Alice!
print(greet("Good morning", "Bob")) # 出力: Bob, Good morning!
位置引数は順序が重要であり、関数定義時の順序と一致させる必要があります。
間違った順序で渡すと意図しない結果になる可能性がある点に注意しましょう。
キーワード引数
キーワード引数は、引数の名前を明示的に指定して値を渡す方法です。
def describe_person(name, age, occupation):
return f"{name} is {age} years old and works as a {occupation}."
print(describe_person(age=30, name="Charlie", occupation="engineer"))
# 出力: Charlie is 30 years old and works as a engineer.
キーワード引数を使用すると、引数の意味が明確になる上に引数の順番を気にする必要がなくなり、コードの可読性が向上します。
デフォルト引数
デフォルト引数は、関数定義時に引数にデフォルト値を設定しておくことで、関数を呼び出す際にその引数を省略できるようにするものです。
関数呼び出し時に引数が指定されなかった場合は、デフォルト値が使用されます。
def power(base, exponent=2):
return base ** exponent
print(power(3)) # 出力: 9 (3^2)
print(power(3, 3)) # 出力: 27 (3^3)
デフォルト引数を使用することで、関数の柔軟性が増し、多くの場合で省略可能な情報でも引数として扱えるようになります。
可変長引数
可変長引数は、関数が任意の数の引数を受け取ることができるようにする機能です。
Pythonでは、アスタリスク(*)を使って可変長位置引数を定義し、二重アスタリスク(**)を使って可変長キーワード引数を定義します。
def sum_all(*args):
return sum(args)
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print(sum_all(1, 2, 3, 4, 5)) # 出力: 15
print_info(name="David", age=35, city="New York")
# 出力:
# name: David
# age: 35
# city: New York
可変長引数は多様な入力に対応できるため、大規模なプログラムやライブラリでよく使われます。
Python関数の一覧と代表的な機能

多くのプログラミング言語において、組み込み関数と言ってすでに用意されている関数が用意されています。
関数はライブラリというものに用意されており、ライブラリを使う定義をすることによって多くの関数が使えるようになります。
特によく使う関数は、標準ライブラリと言うものに用意されていてこれはあえて定義しなくても使うことができます。
Pythonの組み込み関数の一覧と機能は以下のとおりてす。
| 関数名 | 機能 |
| abs | 数の絶対値を返します。引数は整数または浮動小数点数 |
| bool | 真偽値、すなわち True か False のいずれかを返します。 |
| chr | Unicode コードポイントが整数 i である文字を表す文字列を返します。例えば chr(97) は文字列 ‘a’ を、 chr(8364) は文字列 ‘€’ を返します。 |
| dir | 引数がない場合、現在のローカルスコープにある名前のリストを返します。引数がある場合、そのオブジェクトの有効な属性のリストを返そうと試みます。 |
| float | 数または文字列 x から生成された浮動小数点数を返します。 |
| format | 引数1 を 引数2 で指示された通りに “整形” した文字列表現に変換します。 |
| hex | 整数を先頭に “0x” が付いた小文字の 16 進文字列に変換します。 |
| input | 引数があれば、引数をメッセージとして出力して、入力されたものを読み取り、文字例として返します。 |
| int | 数値または文字列 x から作成された整数オブジェクトを返します。 |
| max | iterable の中で最大の要素、または2つ以上の引数の中で最大のものを返します。 |
| min | iterable の中で最小の要素、または2つ以上の引数の中で最小のものを返します。 |
| 引数を標準出力します。標準出力は通常は画面になります。 |
組み込み関数を使うことによって、開発効率化や処理速度向上に繋がります。
型変換関数
型変換関数は、あるデータ型から別のデータ型に変換するために使用します。
型変換関数の例は以下のとおりです。
- int(): 整数に変換します。例:int(“10”) は整数の10を返します。
- float(): 浮動小数点数に変換します。例:float(“3.14”) は浮動小数点数の3.14を返します。
- str(): 文字列に変換します。例:str(42) は文字列の”42″を返します。
- bool(): ブール値に変換します。例:bool(1) はTrueを返します。
- list(): リストに変換します。例:list(“abc”) は[‘a’, ‘b’, ‘c’]を返します。
- tuple(): タプルに変換します。例:tuple([1, 2, 3]) は(1, 2, 3)を返します。
これらの関数を使用することで、異なるデータ型間の変換を簡単に行えます。
数学関数
数学関数は、数値計算や数学的操作を行うために使用します。
- abs(): 絶対値を返します。例:abs(-5) は5を返します。
- pow(): べき乗を計算します。例:pow(2, 3) は8を返します。
- round(): 数値を指定した小数点以下の桁数に丸めます。例:round(3.14159, 2) は3.14を返します。
- sum(): イテラブルの要素の合計を返します。例:sum([1, 2, 3]) は6を返します。
- max(): 最大値を返します。例:max(5, 2, 8) は8を返します。
- min(): 最小値を返します。例:min(5, 2, 8) は2を返します。
シーケンス操作
シーケンス操作関数は、リストやタプルなどのシーケンスを操作するためのものです。
- len(): シーケンスの長さを返します。例:len([1, 2, 3]) は3を返します。
- sorted(): リストやタプルなどの要素を昇順にソートした新しいリストを返します。例:sorted([3, 1, 2]) は[1, 2, 3]を返します。
- reversed(): シーケンスの要素を逆順にしたイテレータを返します。例:list(reversed([1, 2, 3])) は[3, 2, 1]を返します。
入出力
入出力関数は、プログラムと外部とのデータのやり取りを行うための処理を行います。
- print(): オブジェクトを標準出力に出力します。例:print(“Hello, World!”) は “Hello, World!” を出力します。
- input(): ユーザーからの入力を受け取ります。例:name = input(“Enter your name: “) はユーザーに名前の入力を求めます。
- open(): ファイルを開き、ファイルオブジェクトを返します。例:file = open(“example.txt”, “r”) は “example.txt” ファイルを読み取りモードで開きます。
オブジェクト情報
オブジェクト情報関数は、オブジェクトの型や属性に関する情報を取得するために使用します。
- type(): オブジェクトの型を返します。例:type(42) は <class ‘int’> を返します。
- isinstance(): オブジェクトが指定したクラスのインスタンスかどうかを確認します。例:isinstance(42, int) はTrueを返します。
イテレーション関連
Pythonにはループ処理を効率的に行うための関数や、シーケンスの要素を操作するための関数も用意されています。
- iter(): イテラブルからイテレータを生成します。例:iter([1, 2, 3]) はリストのイテレータを返します。
- next(): イテレータの次の要素を取得します。例:next(iter([1, 2, 3])) は1を返します。
- filter(): 指定した関数で真と評価される要素のみを含むイテレータを返します。例:list(filter(lambda x: x > 0, [-1, 0, 1, 2])) は[1, 2]を返します。
Python関数の応用的な使い方

Pythonでは、関数をより高度に活用することで、より簡潔で効率的なコードを書くことができます。
ここでは、Python関数における応用的な使い方として、以下の5つのテクニックを具体的なコード例とともに解説していきます。
- デコレータ
- クロージャ
- ジェネレータ関数
- 再帰関数
- 高階関数
デコレータ
デコレータは、関数の振る舞いを変更するための手法で、関数の前後に処理を追加できます。関数やクラスの前に@記号を付けて使用します。
例えば、関数の実行時間を計測するデコレータは以下のように実装できます。
def timing_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__} took {end_time - start_time:.2f} seconds to execute.")
return result
return wrapper
@timing_decorator
def slow_function():
time.sleep(2)
return "Finished"
slow_function()
このデコレータは、関数の実行時間を計測し、結果を表示します。デコレータは、ロギングやアクセス制御など、さまざまな場面で利用されます。
クロージャ
クロージャは、外部関数のスコープ内で定義された内部関数が、その外部関数の変数にアクセスできる機能です。これにより、状態を保持することができます。
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
counter_a = make_counter()
print(counter_a()) # 出力: 1
print(counter_a()) # 出力: 2
この例では、make_counter関数が内部でcount変数を持ち、その状態を保持するcounter関数を返します。クロージャは、データ隠蔽やカプセル化に使用されます。
ジェネレータ関数
ジェネレータ関数は、イテレータを生成するための特別な関数です。
yieldキーワードを使用することで、関数の処理を中断して値を返却します。メモリ効率の良い処理を実現したい場合に役立ちます。
def read_large_file(file_object):
for line in file_object:
yield line.strip()
with open('large_file.txt') as f:
for line in read_large_file(f):
print(line)
上記の例では、サイズな大きなファイルを行ごとに読み込むことでメモリ使用量を抑える効果があります。ジェネレータは大規模データ処理を行うときに使用されます。
再帰関数
再帰関数は、自身を呼び出す関数です。複雑な問題を小さな部分問題に分割して解決するのに役立ちます。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5))
この例では、5の階乗を計算しています。再帰関数は、ツリー構造の探索やグラフ探索など、自己相似的な問題の解決に適しています。
高階関数
高階関数は、関数を引数として受け取ったり、関数を戻り値として返す関数のことです。関数をより抽象的に扱いたい場合に使用します。
def apply_function(func, value):
return func(value)
def square(x):
return x * x
result = apply_function(square, 5)
print(result)
このコードでは、square関数を引数として受け取り、その結果を返します。高階関数は、コードの再利用性を高め、より抽象的で柔軟なプログラミングを可能にします。
Python関数で効率よく開発しましょう

Python関数は、効率的で保守性の高いコードを書くために欠かせない機能です。
この記事では、Pythonの関数の基礎から応用まで幅広く説明してきました。
Python関数を活用することで、コードの重複を減らし、可読性・再利用性を高められます。
また、Pythonには、様々な処理を効率的に行うための組み込み関数が多数用意されています。
さらに、デコレータやクロージャ、ジェネレータ関数、再帰関数、高階関数といった応用的な使い方を習得することで、より高度なプログラム開発が可能になります。
今回紹介した内容を参考に、Python関数を使いこなし、効率的かつ質の高いプログラム開発を目指しましょう。
Pythonを使ったシステムを開発する会社の選定に迷った場合は、実績豊富な株式会社Jiteraに一度ご相談ください。
経験豊富な専門家があなたの要望に沿った開発をサポートします。

