Python活用術 – ユーザ定義関数 & クラス

Python活用術

Python活用術Topに戻る

ユーザ定義関数 (def)

実施のプログラムでは一度作ったプログラムコードの一部を別のところでも使いたいということが頻繁に起きます。Pythonでは複数の命令文をまとめたものに名前をつけてユーザオリジナルの関数として定義できます。ここではユーザオリジナルの関数の定義方法について説明します。

ユーザ定義関数の定義方法

ユーザ定義関数は以下に示すようなdef構文を使うことで定義できます。
また、慣例として 関数名はすべて小文字にして複数の単語を含む場合は function_a() のように単語をアンダーバーでつなげて記載することが多いです。

def 関数名():
  処理内容

関数の引数の記載方法

ユーザ定義関数には関数を呼び出すときに値を渡すことができます。関数に渡される値のことを引数といいます。引数の渡し方は下記のように記載します。

一般的な引数

引数の受け渡しは関数の後ろの()を使って行います。複数渡すときはカンマ(,)で区切って必要なだけ並べます。

function(x,y,z)

出力結果:10 9 8 7 6 5 4 3

キーワード引数

次のようにすると変数の名前を指定して渡すことができます。
キーワード引数を用いると、関数を呼び出すときに引数で指定する値の意味が分かりやすくなる利点があります。また、順番を入れ替えても正しく値を渡すことができます。def構文で引数を受け取る変数名がそのままキーワードになります。

function(name1=x, name2=y)

出力結果:10 9 8 7 6 5 4 3

デフォルト引数

関数を呼び出すときに引数を指定しなかったとしても、あらかじめ決められている値を使用するように関数側で設定できます。
※ デフォルト値を設定していても、引数を指定することで指定した引数を渡すことができます。

def 関数名(変数名=デフォルト値):
  処理内容

出力結果:10 9 8 7 6 5 4 3

可変長引数(引数をタプル型で受け取る)

print関数はいくつでも引数を受け取れます。このように受け取れる引数が固定されていない引数のことを可変長引数といいます。可変長引数を定義するには引数の変数名にアスタリスク(*)をつけます。

def 関数名(*変数名):
  処理内容

出力結果:合計 = 48.0

可変長引数(引数を辞書で受け取る)

関数の定義で次のようにアスタリスクを2つ(**)つけると、キーワード引数を可変長引数にできます。

def 関数名(**変数名):
  処理内容

出力結果:
 キー:item, 値:リンゴ
 キー:count, 値:1
 キー:price, 値:120

関数の戻り値

関数では処理に使用する値を引数として渡すことができました。それとは逆に関数で処理を行った結果を呼び出し側に戻すこともできます。関数から戻す値を”戻り値”といい関数の命令文の末尾にreturnというキーワードを記載して設定します。

戻り値が一つの場合

戻り値が一つの場合はreturnの後に続いて戻り値を記載します。

def 関数名(引数)
  処理内容
  return 戻り値

出力結果:150

戻り値が複数の場合

戻り値が複数の場合はタプルを利用して複数の値を戻すことができます。

def 関数名(引数)
  処理内容
  return (戻り値1, 戻り値2, … )

出力結果:25 125

ユーザ定義クラス (class)

Pythonではオリジナルのクラスを定義することができます。
ここではユーザオリジナルのクラスの定義方法について説明します。

ユーザ定義クラスの定義方法

ユーザ定義クラスは以下に示すようにclass構文を使うことで定義できます。
また、慣例として クラス名は先頭の文字を大文字にして複数の単語を含む場合は MyClass のように各単語の先頭を大文字にしてつなげて記載することが多いです。

class クラス名:
  def __init__(self, その他の引数):    # 初期化メソッド(コンストラクタ)
    処理内容
  def 関数名(self, その他の引数):     # メソッド
    処理内容
  • 初期化メソッド
    インスタンスが生成されたときに自動で呼び出される処理です。 __init__ という関数名であることが決められています。初期化メソッドはコンストラクタとも呼ばれます。
    第1引数は生成されたインスタンス自身が渡されることが決まっているため、初期化メソッドに値を渡す場合には第2引数以降を使います。第1引数は慣例として self で記載されることが多いです。
  • メソッド
    インスタンスの持つ機能です。インスタンスのメソッドを使用するにはインスタンスを参照する変数名の後にドット(.)とメソッド名をつなげて記載します。
    初期化メソッド同様に第一引数は生成されたインスタンス自身です。

出力結果:
 学籍番号= 1234
 氏名= 山田太郎
 学籍番号= 1235
 氏名= 山田花子

クラス変数 & クラスメソッド

クラスには、インスタンスを生成しなくても使用できる変数(クラス変数) やメソッド(クラスメソッド)を定義することができます。

クラス変数はclassブロックの中に直接「変数名 = 値」と記載することで定義できます。
クラスメソッドは「@classmethod」をメソッドの前に記載することで、その下に続くメソッドをクラスメソッドとして定義することができます。クラスメソッドでは第一引数はクラスそのものが渡されます。また、変数名はclsとするのが一般的です。

class クラス名:
  クラス変数名 = 値  # クラス変数

  @classmethod          
  def 関数名(cls, その他の引数): # クラスメソッド
    処理内容

出力結果:True

他のプログラムコードでクラスを再利用する方法

一度定義したクラスを他のプログラムコードでも再利用できます。他のプログラムコードでクラスを読み込む場合は次のようにコードの先頭にimport文を使用し,プログラムが記載されたファイル名とクラス名を指定して読み込むことができます。
※ファイル名は拡張子(.py)を除いたファイル名です。

from ファイル名 import 読み込むクラス名

例えば、前述した「#classの例」で定義したクラスを「student_card.py」というファイル名で保存した場合は別のプログラムコード次のように記載することで再使用することができます。

出力結果:
 学籍番号= 1234
 氏名= 山田太郎
※ 読み込むファイルはパスが設定済みのフォルダまたは現在の作業フォルダに保存しておく必要があります。

コメント

タイトルとURLをコピーしました