1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

「数億規模スタートアップのCTO講師」と「エンジニアキャリア専門のポテパン」が贈る、実践型Rubyスクール。

Pythonを使ったプログラミング 関数の定義

Pocket

Pythonを使ってプログラミングをしていると、様々な関数を利用します。

関数はすでに用意されている組み込み関数などを使うだけでなく、自分でオリジナルの関数を作ることもできます。

同じ処理を何度もする場合は関数としてまとめておけばコードが見やすくなりますし、再利用も簡単にできます。

今回は関数を定義する方法について解説します。

 関数を定義する

Pythonで独自の関数を定義するには「def文」を使います。def文の使い方は以下の通りです。

引数の数は自由で、引数が1つもない関数も定義できます。定義した関数を使うには組み込みの関数と同じく「関数名()」で関数を呼び出します。

関数名は関数の名前で、関数を呼び出すときに使います。引数はその関数に渡す変数です。

引数がある場合は引数に渡す変数を()の中に記述します。

この例では2つの引数を持つ「plus」という関数を定義しました。

実行結果

関数は引数に渡された数字を足し合わせて、その答えを表示するという機能を持っています。

関数内で処理した結果を呼び出し元で使いたい場合は「return」を使って戻り値を返すことができます。

変数のスコープ

実行結果

関数を使う上で気を付けないといけないのが変数の「スコープ」です。

スコープとはその変数を参照できる範囲を表します。

関数内で使用する変数にはスコープがあり、関数の中でしか参照することができません。

例えば、先ほどのplus関数で使われている「x」という変数を関数の外から参照しようとすると以下のようになってしまいます。

xは定義されていない、つまり存在しない変数というエラーがでます。

実行結果

関数内で使われる変数は、関数の外からは参照できず、存在しないものと判断されてしまいますので注意しましょう。

高階関数を使う

pythonの関数は他の言語とは異なり、変数に格納したり、引数として別の関数に渡したりすることができます。

このうち、関数を引数に渡したり返り値として返したりする関数を高階関数と言います。

この例ではpick_up()が高階関数です。

実行結果

pick_upはリストと関数の2つの引数を持ちます。

引数で渡したリストの各要素に、引数で渡した関数を適用させ、戻り値があった要素を関数内で作ったリストに格納します。

そして、最後にそのリストを返します。

low_ten()は引数の数字が10以下の時だけその数字が返されます。

つまり、pick_upに数字で作られたリストを渡すと、10以下の数字だけで構成される新しいリストが返ってきます。

高階関数のメリットは、引数として渡す関数を変えるだけで簡単に処理を変更できる点にあります。

例えば10以上の数字だけで構成されるリストや、偶数だけで構成されるリストを返すようにしたい場合は、

low_ten()を10以上なら返す関数upper_ten()や偶数なら返す関数is_even()などに変えるだけで、すべての要素にアクセスする部分については変更する必要がありません。

ドキュメンテーション文字列

関数を定義する際に、その関数について説明する「ドキュメンテーション文字列」を書くことができます。

defで関数を定義した後に”””と”””の間に文字列で説明を書くとそれがドキュメンテーション文字列となり、help()でそのドキュメンテーション文字列を参照することができます。

ドキュメンテーション文字列は必須ではありませんが、ドキュメンテーション文字列があれば他の人や後々自分が読んだときにその関数がどういったものなのかを理解しやすくなります。 

実行結果

できるだけ、ドキュメンテーション文字列を書くようにしましょう。

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

初心者がプログラミングで挫折しない学習方法を無料動画で公開中。オンラインに特化したプログラミングスクール「TechAcademy(テックアカデミー)」が解説。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

おすすめスクール

システムアーキテクチュアナレッジ

システムアーキテクチュアナレッジ システムアーキテクチュアナレッジでは、ITスクールとしては珍しく正規雇用かつ現役のエンジニアが講師を務めています。「責任を持ったIT教育」をテーマに、未経験者をプロフェッショナルに育てます。
ページ上部へ戻る