Python

【Python初心者】 関数の基本を理解しよう。

こんにちは(@t_kun_kamakiri)(‘◇’)ゞ

この記事ではPythonの「関数」について解説します。

この記事で学ぶこと

  1. 関数の基本的な書き方
  2. 関数に引数を使った書き方
  3. 関数の中に関数を書く(クロージャー)
  4. ラムダ式の関数定義

Pytonの関数は以下の2通りを覚えておきましょう。

  • 「def 関数名()」の基本的な書き方
  • 「lambda パラメータ1, パラメータ2 : 処理」の書き方
 
使用環境を示しておかないと混乱しそうなのでちゃんと書いておきます(^^)/
 

【Pythonの使用環境について】
Anaconda
Google Colaboratory
当ブログはこれをメインに使った計算結果です。

関連記事

 

☟書籍も紹介しておきます。
こちらの本がPython初心者が挫折することなく勉強できる本です。
(本記事のようのPython使用環境と異なりますが、とてもわかりやすいので全く問題ありません)

確かな力が身につくPython「超」入門 (確かな力が身につく「超」入門シリーズ)

確かな力が身につくPython「超」入門 (確かな力が身につく「超」入門シリーズ)

鎌田 正浩
2,728円(09/30 16:17時点)
発売日: 2016/03/16
Amazonの情報を掲載しています
スポンサーリンク

Pythonの関数とは

 

Pythonの関数は「色々な機能がひとつにまとまったもの」を意味します。

機能とは「したい処理内容」のことを意味しています。

カマキリ

具体例を見ながら学びましょう。

例えば、部屋の温度を下げるため冷房を効かせたいとします。
この時に、人がすることは冷房ボタンを押すだけです。
冷房ボタンを押すことにより、冷房が冷風を送るという動作が行われます。もちろんリモコンボタンはなんでもしてくれる便利道具ではなく、あらかじめ決められた処理内容が冷房機器には設定されていて、ボタンを押すという処理を呼び出す動作をすることで、冷風を送るという処理が行われたということになります。

以下で具体的にコードを書いてみましょう。

Pythonの関数の書式

 

Pythonの関数の機能を使うには「def」というキーワードと使います。

defはdefineから来ており、「関数をdefineする」という意味です。

関数の書式

※注意点

  1. defの最後には「:」を忘れないこと。(これはif文でも同じです)
  2. 処理1、処理2、・・・の前は「tabスペース」を設けること。
    Pythonに対応したエディタであれば自動的に「tabスペース」を作ってくれますが、専用でないエディタであれば自分で「tabスペース」を設ける必要があります。
    この「tabスペース」のPythonルールはインデントと呼ばれており、プログラミングの記述をわかりやすくするためのルールです。
    わかりやすくするためと言いつつ、知っておかないとこんなところでよくわからないエラーになります。

Pythonの関数を使ってみよう

 

仕組みや概念の理解も大事ですが、とりあえず使って慣れることの方がもっと大事です。

実際にコードを書いてみましょう。

【結果】

「cool()」という名前の関数を定義して、その中にprint文で「冷風を送る」と「涼しいかい?」と出力する処理を書いています。

しかし、関数を定義しただけでは何も動作はしません。

その後に、「cool()」と書いて関数を呼び出すことで、関数内の処理が行われます。

ここで注意があります。

関数の呼び出しは、関数を定義した後に記述しなければエラーになってしまいます。
例えば、関数の呼び出しと関数の定義の順番を逆にしてみます。

【結果】

上記のようなエラーとなります。
エラー内容は、「’cool_1’」というな名前のオブジェクトが定義されていないとなっています。

関数の中でif文を使う

【結果】

「temp = 20」なので、関数を呼び出した際の「temp == 20」が真となるため、if文内の、

  • print(‘温度は%d℃です。’ % temp)
  • print(“涼しいかい?”)

この2つの処理が行われました。

※ちなみに、「print(‘温度は%d℃です。’ % temp)」は、%dにtempの変数が入る記述方法です。
このように、文字列中の変換指定子%d%sを書くと、文字列の中に「% temp」の変数の値が%dに代入されます。

変換指定子は整数が%d、浮動小数点が%f、文字列が%s。詳しくは公式ドキュメント参照に下ください。

関数に引数を入れて処理結果を返す(円の周長さと面積を計算)

 

1つの引数を設定

変数として半径を入力して、関数の中で円の周長さと面積を計算してもらいましょう。

このような処理を行うには関数に引数を入れる必要があります。

実際にコードを書いてみましょう。

【結果】

※補足説明

  1. import mathで円周率「math.pi」を使えるようにしています。
  2. 関数defにradiを入れると、周長Lと円の面積areaをradiに応じて計算してくれます。
  3. その結果を「return L, area」とすることで計算したデータを返すということをしてくれます。

ちなみに結果が「(62.83185307179586, 314.1592653589793)」と、()となっているためタプル型として値が返ってきているということになります。

2つ以上の引数を設定

引数には2つ以上設定することもできます。

例えば薄肉円筒の\(\theta\)方向の応力を計算したいとします。

薄肉円筒の\(theta\)方向の応力は、\(\sigma=\frac{pD}{4t}\)となります。

では、実際にコードを書いてみましょう。

【結果】

関数「calc」を定義して「dia, press」という直径と圧力の2つの引数を設定しています。

あとは、内部の処理で、「sigma_theta = (press * dia)/(4.0 * t) 」としていますが、これは薄肉円筒の\(theta\)方向の応力\(\sigma=\frac{pD}{4t}\)を計算式ですね。

それをreturn文で値を返すようにしています。

そして、print(‘応力は{}Paです’.format(round(calc(50, 100),2)))で小数点第二位までをprint文の{}内に埋め込むようにして出力して今sう。


以上のような計算式を用意しておくと、強度が1000Pa以上だと不足するという判断をif文で用意しておけば以下のような強度の判断をする処理が可能になります。

【結果】

「calc(50, 100)」を計算した結果は1041.67で1000より大きいため、if文内の「強度不足です」がprint文で出力されています。


 

以上のように引数は2つでも3つでも構いません。

今回の場合でも板厚tをさらに引数にして、「直径、圧力、板厚」で強度不足を判断するプログラムを作っても良いでしょう。

関数の引数に可変長パラメータを設定

先ほどまでは、

【プロフィール】

カマキリ
(^^)

大学の専攻は物性理論で、Fortranを使って数値計算をしていました。
CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。

プロフィール記事はこちら

 

大学学部レベルの物理の解説をします 大学初学者で物理にお困りの方にわかりやすく解説します。

このブログでは主に大学以上の物理を勉強して記事にわかりやすくまとめていきます。

  • ・解析力学
  • ・流体力学
  • ・熱力学
  • ・量子統計
  • ・CAE解析(流体解析)
  • note
    noteで内容は主に「プログラミング言語」の勉強の進捗を日々書いています。また、「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。
  • youtube
    youtubeではオープンソースの流体解析、構造解析、1DCAEの操作方法などを動画にしています。
    (音声はありません_(._.)_)
  • Qiita
    Qiitaではプログラミング言語の基本的な内容をまとめています。