Pythonでのdef文を使った関数の書き方まとめ

19/02/11 18:05:36     19/02/11 21:47:54

pythonでのdef文

Pythonはオブジェクト指向で実装していくのが基本なのでクラスを作成してそこからオブジェクトを生成します。そしてクラスのなかではいろいろな機能を記述するのですが、関数はそのなかでもメインパーツと言えます。

クラスを外部からインポートしてオブジェクトを生成する場合自分で関数を作る必要はありませんが、そうでない場合関数を自分で作ることになります。その際に使うのがdef文ですが、このページではdef文を使った関数の定義方法を紹介します。

defとは

関数を自分で定義する際に使用するのがdefですが、これはdefineの略です。つまり、和訳すると「定義する」という意味です。

たとえば、「def sampleMethod()」のように関数を定義します。

()内には引数が入り、関数を引用する際には戻り値の入る変数等を用意するのが一般的です。別の言語などでも関数を使用した経験のある方からすると当たり前と思われるかもしれませんが、プログラミング経験があまりない方だとよくわからないかもしれません。

しかし今はなんとなく理解しておけばすぐにわかってくるので、ご安心ください。

いろいろな関数の定義

defを使って関数を定義するというのは上記の通りですが、ひとことに関数と言っても複数種類があります。具体的には、以下のような種類があります。

  • 引数のない関数
  • 引数のある関数
  • 戻り値がない関数
  • 戻り値がある関数

それぞれの関数を定義する例を紹介します。

引数のない関数の定義

引数のない関数のサンプルコードは以下です。

def sample():
    print('Hello World!')

sample ()

上記のソースコードを実行すると、「Hello World!」と出力されます。コンソール出力するだけの関数なので引数はありません。関数を定義して呼び出すと、上記の結果になりました。

引数のある関数の定義

引数のある関数のサンプルコードは以下です。

def sample(a,b):
    print(a*b)

sample(2,5)

上記のソースコードを実行すると、以下のようにコンソール出力されます。

10

まず関数を定義する際に第一引数のaと第二引数のbを用意しています。それを出力の際に掛け算する仕様にしています。そして関数を呼び出す際に第一引数に2、第二引数に5を渡しています。

引数の受け渡しの文字は自由で、今回は便宜的にaとbにしているだけです。

次にもう少し実践的なコードを紹介します。

def sample(input_string):
    if (input_string == " sample"):
        print("sample")
    elif(input_string == "engineer"):
        print("engineer")
    else:
        print("それ以外")

sample("engineer")

上記のソースコードを実行すると、以下のようにコンソール出力されます。

engineer

関数を呼び出した際にengineerを引数として渡しているため、engineerが出力されました。

戻り値のない関数の定義

戻り値のない関数に付いては上で見てきたもので、以下のようになります。

def sample():
    print('hello')
sample()

戻り値はなくて、関数を呼び出して実行するだけです。

戻り値のある関数の定義

戻り値のある関数の定義は以下のようになります。

def sample(a,b):
    c = a*b
    return c

print(sample(2,5))

引数のあるソースコードは上でも紹介しましたが、こちらのソースコードでは関数を呼び出して出力しています。つまり、関数のなかで出力しているわけではありません。その場合関数を実行するだけでは処理できず、必ず戻り値を取得する必要があります。

関数内でreturn処理を行っているので、関数を実行した際に戻り値を取得できます。その結果「10」が出力されるのですが、以下のように戻り値を設定しないとうまく処理されません。

def sample(a,b):
    c = a*b

print(sample(2,5))

このコードでは関数を実行して呼び出しているのですが、戻り値がありません。関数の処理をしてそれで終わりなので、出力するものが何もないということです。結果的に、「None」と出力されます。

以下のように、条件に応じて戻り値を変えることもできます。

def score(a):
    if a > 60:
        return True
    return False

print(score(70))
print(score(50))

上記のコードを実行すると、以下のように出力されます。

True
False

引数が60を超えていればTrueを返し、逆に60以下だとFalseを返します。

引数と戻り値を混同しないように注意

上の説明で関数の定義や使い方は一通り問題ないかと思いますが、説明を見ていて引数と戻り値で混乱されている方もいるかもしれません。用語と概念がどっちがどっちかわからなくなる程度であればまだ良いのですが、そもそも意味がわからない、違いがよくわからない、といった状況だとプログラミングに支障が出ます。

そこで、今一度引数と戻り値の意味と使い方の違いを確認しておきましょう。まず日本語で定義をざっくり書くと以下のようになります。

  • 引数・・・関数に渡す値。
  • 戻り値・・関数から受け取る値。

説明の仕方は解説書やサイトによって異なりますが、シンプルに書くと上記のようになるでしょう。

まず引数は関数に渡す値です。関数側の定義でどのような引数を受け取るかあらかじめ定義してはいますが、実行時の処理としては関数を呼び出す際に関数側に受け渡すものです。

一方で、戻り値は関数を実行した結果受け取る値です。なので、戻り値ありの関数を実行する場合、戻り値を変数に入れるなり出力するなり何かしらの処理が必要になります。このように引数と戻り値には明確な違いあるため、普通に考えれば混同されないはずです。

ではなぜ引数と戻り値が混同されるのか

上で説明した通り引数と戻り値には明確な違いがあるのですが、混同されることがあります。その理由としては、引数の設定は関数側と関数呼び出し側の両方で設定する必要があるからでしょう。

たとえば上で説明したコードだと、関数側でdef sample(a,b):、関数呼び出し側でprint(sample(2,5))、といった形で設定しています。まず関数側で設定しているのは、引数を受け取るための枠組みです。

そして、関数を呼び出す箇所で設定しているのは引数として渡す値です。つまり、引数の値は関数を呼び出す側で設定しています。逆に、戻り値は関数側で処理した結果なので、関数呼び出し側で設定するわけではありません。

関数を呼び出す際には、戻り値をどのように処理するのかを準備します。これらの内容を踏まえたうえで、「引数は関数呼び出しの際に関数に渡す値」「戻り値は関数から戻ってくる値。関数呼び出し側では戻り値の処理を設定しておく。」と考えておくと良いでしょう。

基本概念で混乱していると関数の実装がうまくいかず応用できなくなるため、ぜひ押さえておいてください。仮に今回完全には理解できなくても、ある程度理解しておけば次に見たときにより詳細に理解できるかもしれません。

コツコツ考えていけばプログラミングの概念はそれほど難しくはないので、焦らず学習を進めると良いかと思います。

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する