Python: 関数をマスターしよう!

アイキャッチ画像 Python

関数とは

特定のタスクを処理するための一連のコードの集まりのことを関数と言います。そのタスクが頻繁に行われるものであれば、重複するコードを何回も書くことを避けるために、メインコードから切り離して関数を作成するべきです。
このようにコードをいくつかに細かく分けることは、コードの可読性を向上させ、テストをしやすくするというメリットもあります。

関数を使う

関数を使うことを関数を”呼び出す”と表現することもあります。多くの場合、関数を呼び出すのは関数の名前のあとに括弧”()”をつけるだけなので、非常に簡単です。
もし関数が引数とよばれるパラメーターを必要とする場合、括弧の中に必要な引数を入れて呼び出します。引数はその関数の処理中で使われる変数か変数以外の値になります。

関数を定義する

それでは関数を作っていきましょう。関数を作ることを関数を”定義する”といいます。Pythonで関数を定義する際には”def”というキーワードを用います。defの後に関数の名前と()を付けます。引数が必要な場合は()の中に引数名を書きます。その後、関数として実行したいタスクを記述します。

以下のコードを実行してみてください。

def greeting():
    print("Hello!")

このコードを実行しても一見何も起こりません。しかしこれによって、”Hello!”と出力するgreeting()という関数が定義されました。あとは関数を呼び出すだけです。

greeting()を呼び出すと、ちゃんとHello!が出力されましたね。以上が関数の基本になります。

組み込み関数

Pythonにはよく使われる基本的な処理を行うための関数が事前に定義されています。これらのことを組み込み関数と言います。これらにはユーザーからの入力を受け取るものや、画面に出力するためのもの、シンプルな計算、文字列やリストの長さを求めるものなどが含まれます。これまでに何度も使用しているprint()関数も組み込み関数の一つです。

input()とprint()

input()とprint()は組み込み関数です。input()関数の括弧に含まれている”What is your name? :”は引数で、ユーザーからの入力を受け取る際に提示する質問などをこの引数に渡すと、画面に表示するように定義されています。

またprint()関数に渡された引数はそのまま画面に出力されます。今回は、”Hello”というstringと、事前にinput()によって値を代入しておいたname変数の値を出力させています。

四捨五入するためのround()関数

上のコードはround()関数によって円周率の値を四捨五入させています。round()関数は引数に二つの値を必要とします。一つ目の引数には四捨五入される値、二つ目には小数点以下何桁目までを表示するかを決める数字です。今回はpi変数と2を与えているので、piの値を小数第二位まで表示させています。

メソッドの呼び出し

print()やlen()のような組み込み関数は様々な型の引数を許容しているので、呼び出しが簡単です。一方、メソッドは特定のオブジェクトに紐づいた関数のことで、そのオブジェクトに対してのみ使うことができます。メソッドの呼び出しは組み込み関数の呼び出しとは少し異なります。

メソッドの呼び出しにはオブジェクトの名前、その後にドット(.)、その後にメソッド名と括弧()が必要になります。

大文字に変換するupper()メソッド

upper()メソッドは文字列中の全ての小文字を大文字に変換します。upper()メソッドはstringに対してのみ使うことができるメソッドです。

リストに追加するappend()メソッド

リストを作成した後に、リストの中身を追加したいということはよくあると思います。そんな時に使えるのがappend()メソッドです。

append()メソッドは引数に与えられた値をリストの最後に追加します。

戻り値とは

関数の中にはタスクを処理するだけでなく、特定の値を結果として返すものもあります。このとき返される値のことを戻り値と言います。必要であれば関数を呼び出すのと同時に、戻り値を変数に保存することもできます。

def count_letter_e(word):
    total_e = 0
    for letter in word:
        if letter == "e":
            total_e = total_e + 1
    return total_e

user_name = input("Enter your name: ")
total_es_in_name = count_letter_e(user_name)
print("There are " + str(total_es_in_name) + "E's in your name")

上記のコードはユーザーが入力した名前の中に含まれるeの数を求める関数です。

関数count_letter_e(word)は引数に渡された値をfor文の中で一文字ずつeか確認して、eであればtotal_e変数の値を+1しています。最後に結果を戻り値として返しています。

今回は最後に戻り値で得られた情報を一度total_es_in_name変数に保存したあとに、print()関数中でstring型に変換しながら出力しています。

トップダウンコーディング

Pythonでは、関数は通常メインコードより前、一番上に定義されます。Pythonのプログラムはコードの上から順番に実行されるため、ある関数を呼び出す場合、その関数がメインコードや他の関数から呼び出される前に定義される必要があるからです。このことをトップダウンコーディングと言います。

def function_a():
    return 25

def function_b():
    answer = 2 * function_a()
    return answer

number = function_a() + function_b()
print(number)

上記のコードを実行してみてください。

function_b()の中ではfunction_a()が呼び出されていますね。最後にnumberの値として、function_a()とfunction_b()が呼び出されています。

これはfunction_a()とfunction_b()がnumberの行よりも先(上)に定義されているため、実行できます。逆にした場合エラーが発生します。

関数名の付け方

変数名の付け方のルールと同じように、Pythonには関数名の付け方にもいくつかルールがあります。関数ごとに明確なタスクや目的を持たせるのが重要であるのと同様に、その関数が何を行うのかを名前で明確に表現することが重要です。

例えば、get_number()という名前はあまりよくありません。そのnumberが何の数字なのかわからないからです。get_number_of_winners()などとすれば、より具体的に、勝利者の数を取得するための関数なんだということが分かりますね。

また関数名に複数の単語が含まれる場合は、ローワーケース(lowercase)、アンダーバーで区切るようにしましょう。

Pythonでは一般に使われる機能はほとんど標準ライブラリに既に含まれています。しかしながら、多くのプログラムでは特定のタスクを処理するために独自のコードが必要になります。既に定義されている関数を存分に生かしながら、特定のタスク用のコードを加えることで効率よく関数を作成していきましょう。

コメント

プロフィール

プロフィール
コードラボJP

大学卒業後SEに就職、現在は退職しフリーランスとして活動中。
『初心者でも挫折せずに一人でプログラミングを学べる』をモットーに、コードラボJPを開設
お問い合わせ等はcodelabsjp@gmail.comまで

コードラボJPをフォローする
タイトルとURLをコピーしました