Pythonで自分で関数を定義する方法 その1 〜def文の基本と注意点〜

スポンサーリンク

自分の関数を定義する必要性

今回はpythonのdef関数に関して、解説をしていきます。

プログラミングをしていくと、何度も何度も同じ処理をするプログラムを書くことがでてくることでしょう。

何度も書いていくと、どうしてもプログラム自体が長くなってしまいますし、ちょっと変えようと思っても、何箇所も変える必要が出てきて、メンテナンス性が悪くなってしまいます。

もちろんプログラムの読みにくさにもつながり、結局全部描き直すことになるなんてこともあります。

ではそんなときどうしたらいいでしょうか?

その解決策の1つとして、自分で関数を定義するという方法があります。

それがdef文というわけです。

defとはdefinition、つまり英語の定義の頭3文字をとったものになります。

またdef文を使うことのもう1つのメリットは自分の関数ライブラリを作成できることにあります。

つまり新しいプログラムを書く時に、必要な関数を引っ張ってきて、組み合わせることで新たなプログラムを作成することも可能になります。

といいつつも、簡単なプログラムしか書かない私にとっては、活躍の場はそうなかったりするのですが、使う時にはすごく使う文なので、覚えておいた方が絶対的に良いです。

ということで始めていきましょう。

スポンサーリンク

def文の使い方

def文の書き方の基本はこんな感じです。

def 関数名(引数):
    処理

ものすごく簡単なプログラムを書いてみましょう。

def test(x):
    print(x)
    
test(2)

実行結果
2

この例では、まずdef test(x):で、testという名の関数を作りました。

そこに引数として x という変数が入っています。

処理はprint(x)なので、1行目のtest(x)のxに代入された文字列なり、数字なりが代入され、printで出力されています。

ただしdef文は読み込まれるものの、即座に処理されるわけではなく、通常の関数のように呼び出す必要があります。

そこで4行目でtest(2)として、引数に2を入れて、呼び出し、処理を開始しています。

スポンサーリンク

def文の注意点

def文で書かれた処理は、その関数を呼び出す前に定義しなければいけないことです。

つまりこういう書き方ではエラーが出てしまいます。

test2(5)

def test2(x):
    print(x)

実行結果
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
----> 1 test_2(2)
      2 
      3 def test_2(x):
      4     print(x)

NameError: name 'test2' is not defined

最初の行で、test2(5)を処理しようとしていますが、test2という関数はこの時点では存在しません。

そこで「name ‘test2’ is not defined」、つまり「test2は定義されていません」とエラーが表示されました。

そのため、通常def文はプログラムの最初の方に一括で読み込みます。

個人的にはライブラリをインポートした後に記載するようにしています。

def test1(x):
    print(x)
    
def test2(x):
    print(x+1)
    
def test3(x):
    print(x+2)
    
a = 1

test1(a)
test2(a)
test3(a)

実行結果
1
2
3

ちなみにそれぞれのdef文の引数ですが、同じ変数名を使っても構いません。

それぞれの中でのみ使われる「ローカル変数」として使われるためです。

スポンサーリンク

複数の引数を定義

ちなみにこれまで引数は1つだけでしたが、複数の引数を定義することもできます。

その際は、def 関数名(引数1, 引数2, 引数3 …): というようにカンマで繋げます。

例えばこんな感じです。

def calc1(x, y, z):
    print(x)
    print(x + y)
    print(x + y + z)
    
calc1(1, 2, 3)

実行結果
1
3
6

中で複雑な処理をすればするほど、引数は多くなる傾向にありますので、できれば引数名は複雑になる程、分かりやすい名前をつける方がオススメです。

ということで今回は簡単にですが、def文を解説してみました。

次回は3PySciに届いたPythonの質問、グラフタイトルをCSVファイル名にする方法に関して解説をしていきます。

Pythonでグラフ表示 matplotlib 〜グラフタイトルをCSVファイル名にする方法〜
グラフタイトルをCSVファイル名にする方法2020年2月11日、下の記事にjunneyさんより質問を頂きました。せっかくなので記事にしつつ、質問にお答えしようと思います。とりあえず質問はこちら。はじ...

ということで今回はこんな感じで。

コメント

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