このページのリンクには広告が含まれています。 プログラミング

【Python】関数(def文)の使い方を簡単に理解!引数・戻り値やモジュール化を詳しく解説

Pythonの関数(def文)は、Pythonで同じ処理を繰り返す際によく使われます。

関数を使うことで、コードの整理や再利用がしやすくなり、プログラムの可読性も向上します。

また、関数をまとめたファイルを作成(モジュール化)し、他のプログラムから呼び出すことも可能です。

この記事では、引数・戻り値・可変長引数や別ファイルからのインポート方法を詳しく解説します!

参考になれば幸いです!

関数とは?

関数とは中学校や高校で習った、\(y=f(x)\)のことです。

言葉でいうと、特定の処理をまとめて実行できる仕組みのことです。

\(y=f(x)\)を見てみると、入力 \(x\) を受け取り、関数 \(f\) という処理を行い、出力 \(y=f(x)\) を返すという仕組みです。

こちらの図のようなイメージです。

このように、関数にデータを入力し、処理を実行して結果を出力する仕組みをPythonで行うときにdef文を使用します。

一般にプログラミングで関数へ入力するデータ \(x\) のことを引数と呼び、\(y\) として出力される値を戻り値と呼びます。

Pythonで行う処理に場合分けが使われていたり、複雑な処理が使われていたりすると、関数のメリットが活きてきます。

関数の使い方

def文の書き方について解説します。

def文で名前を付けて関数を定義し、使う時はその関数名を呼び出します。

#関数を定義する
def 関数名(引数1, 引数2,…,引数n):
    処理
    return 戻り値

#関数を呼び出して使う
関数名(引数1, 引数2,…,引数n)

戻り値のある関数とない関数

Pythonの関数は、戻り値(return値) があるものとないものに分類できます。

それぞれの特徴や使い方を詳しく解説します。

戻り値のある関数

関数の処理結果を return を使って返します。関数を呼び出したときに、計算結果やデータを取得できます。

#戻り値のある関数(return を使う)
def add(a, b):
    return a + b  # 計算結果を返す

result = add(3, 5)
print(result)  # 8

引数として\(a\) と\(b\) を関数add(a,b)に渡し、戻り値returnを取得し、resultに代入しています。

return で結果を返すので、関数の出力を別の処理に活用できます。

また、return の後に書かれたコードは実行されません。以下の例を実行してみましょう。

# return の後にコードを書くとどうなる?
def example():
    return "戻り値があるよ"
    print("この行は実行されません")  # 実行されない

print(example())  # 戻り値があるよ

return が実行された時点で関数が終了するため、print() は実行されません。

戻り値のない関数

#戻り値のない関数(return を使わない)
def greet(name):
    print(f"こんにちは、{name}さん!")

greet("太郎")  # こんにちは、太郎さん!

関数が 結果を返さず、処理だけを実行 します。

return を使わず、print() などで直接画面に出力することが多いです。

return を使わないので、関数の戻り値は None になります。print() で直接出力するため、値を再利用できないです。

以下の例を実行してみましょう。

# None になる例
def say_hello():
    print("Hello!")

result = say_hello()
print(result)  # None

say_hello() には return がないので、result の値は None になります。

戻り値がある関数とない関数の使い分けは以下の表のようになります。

戻り値の有無 特徴 使いどころ
戻り値がある (return)関数の結果を返す計算結果やデータを他の処理に活用するとき
戻り値がない (return なし)画面に出力するだけメッセージを表示したり、ファイルに書き込んだりするとき

デフォルト引数

引数には、初期値を設定できます。

呼び出し時に値を指定しなかった場合、デフォルト値が使われます。

def greet(name="ゲスト"):
    print(f"こんにちは、{name}さん!")

greet()        # こんにちは、ゲストさん!
greet("花子")  # こんにちは、花子さん!

引数を省略すると "ゲスト" というデフォルト値が使われることになります。

可変長引数

引数の数が可変な関数を作ることも可能です。

  • *args:複数の位置引数をタプルとして受け取る
  • **kwargs:複数のキーワード引数を辞書として受け取る

*args(可変長の位置引数)

*args を使うと、関数に 複数の引数タプル として受け取ることができます。

引数の数が事前に決まっていない場合に便利です。

#複数の数値を受け取って合計を計算
def sum_numbers(*args):
    return sum(args)

print(sum_numbers(1, 2, 3, 4))  # 10

このように、引数の数を指定せずに、好きなだけ渡すことができます。

**kwargs(可変長のキーワード引数)

**kwargs を使うと、複数のキーワード引数辞書(dict) として受け取れます。

関数に渡すデータの種類が可変な場合に便利です。

#ユーザー情報を受け取る
def user_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

user_info(name="太郎", age=25, country="Japan")
# name: 太郎
# age: 25
# country: Japan

引数を辞書として受け取り、キーと値を順番に表示することができます。

#オプション付きの関数
def print_message(message, **options):
    prefix = options.get("prefix", "")
    suffix = options.get("suffix", "")
    print(f"{prefix}{message}{suffix}")

print_message("こんにちは", prefix="★", suffix="★")  
# ★こんにちは★

オプション(prefix, suffix)を渡すことで、柔軟なメッセージ表示が可能となります。

*args**kwargs の順序

関数の引数の順序は (通常の引数)→ *args**kwargs の順番で指定する必要があります。

def example(a, b, *args, c=10, **kwargs):
    print(a, b, args, c, kwargs)

example(1, 2, 3, 4, 5, c=20, d=30, e=40)
# 1 2 (3, 4, 5) 20 {'d': 30, 'e': 40}

関数のモジュール化

関数を モジュール化 することで、コードを分割・整理し、再利用しやすくできます。

ここでは、関数のモジュール化のメリットと方法を詳しく解説します!

モジュール化とは?

モジュール化とは、関数を別のファイル(モジュール)に分けて管理すること です。

規模の大きなプログラムを作る際には、関数を別ファイルとして持っておくと管理が容易になります。

また、よく使う処理などを種類ごとにファイルを分けて管理しておくことで、別のプログラムを書くときにそのファイルを再利用することができます。

Pythonでは、.py ファイルごとにモジュールを作成し、必要な場所で import して使います。

モジュールを作成する

モジュール(Pythonファイル)を作成

新しく math_utils.py というファイルを作成し、以下のように関数を記述します。

# 計算用の関数を定義
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

import を使ってモジュールを呼び出す

作成した math_utils.py の関数を、別のファイル(main.py)で使うには import します。

# main.py

import math_utils  # 自作モジュールをインポート

print(math_utils.add(5, 3))      # 8
print(math_utils.subtract(5, 3)) # 2

math_utils.add(5, 3) のように、モジュール名.関数名() で関数を実行できます!

特定の関数のみインポートする

モジュール全体をインポートするのではなく、特定の関数だけを使いたい場合from ... import ... を使います。

# main.py

from math_utils import add  # add 関数のみインポート

print(add(5, 3))  # 8
# print(subtract(5, 3))  # エラー(subtract はインポートしていない)

さきほどimportのみでインポートしたときと比較すると、math_utils. を省略して 使用したい関数add(5, 3) を直接使うことができます。

別名をつけてインポートする

モジュール名や関数名が長い場合は、as を使って別名をつけることもできます。

# main.py

import math_utils as mu  # math_utils を mu にリネーム

print(mu.add(5, 3))  # 8

関数にも別名をつけることが可能です。

# main.py

from math_utils import add as addition # add を addition にリネーム

print(addition(5, 3))  # 8

別のフォルダのモジュールをインポートする

自作モジュールが別のフォルダにある場合は、sys.path.append() を使うとインポート可能です。

フォルダ構成は例としてこんな感じです。

project/
│── main.py  # メインスクリプト
│── utils/
│   │── math_utils.py  # モジュール
import sys
sys.path.append("./utils")  # utils フォルダをパスに追加

import math_utils
print(math_utils.add(5, 3))  # 8

このようにしてフォルダが異なっていてもパスを追加すればインポートが可能です。

まとめ

最後まで読んでいただきありがとうございます。

関数を使うと、コードの再利用性が高まり、可読性も向上します。

ここで紹介したもの以外にも、関数オブジェクトやクロージャなど応用的な関数の利用方法もあります。

この記事では基本の使い方をまとめましたので、今後、必要であれば応用編をご紹介できればと思います!

いりこ
いりこ

関数を使いこなしてスマートなプログラムを書きましょう!

Python初心者におすすめの学習サービス

まずは自分のペースで学習できるオンライン教材を試したい方はこちらがおすすめです。

オンラインPython学習サービス「PyQ™(パイキュー)」:プログラミング初心者に優しいオンラインPython学習サービス。プログラミングを始めたけど、何かを作れるレベルには至っていない人におすすめ。実用的なPythonコードを実装することができる。

  • この記事を書いた人
  • 最新記事

-プログラミング