Python3入門 関数

関数

 

これまでのコードは小さい(量の少ない)断片的のものでした。しかし、その小さなコードを繰り返し打ち込みたい人はいないのです。

 

そのため、コードの再利用できる関数 というのがあります。

 

関数とは、名前のついたコードで、他のコードからは独立しているものです。

 

関数を扱う際、次のことが必要になります。

  • 関数の定義
  • 関数の呼び出し

 

関数の定義

 

書式

 

 

一番単純な関数を作ります。

 

これは引数を取らない関数であり、pass 文を使うと、空の関数の定義を作ることができます。

定義した関数を呼び出すには、関数名() と記述します。

 

 

引数は取らないが、単語を出力する関数を定義します。

 

関数を呼び出すと、その関数内のコードを実行し、メインプログラムに制御を返します。

 

rutern の活用

 

引数なし

 

引数を取らないが、値を返す(戻り値)関数を作ります。

 

戻り値を if 文でテスト,してみてみましょう。

 

戻り値は関数の呼び出し元に返ります。 → if True : 

 

引数あり

 

引数をある場合の関数の定義をします。

  • 関数:func()
  • 引数:thing
  • 戻り値:1 + thing

 

 

1 (整数)を 実引数 として、関数を呼び出します。

 

実引数を渡して関数を呼び出す時、実引数は仮引数にコピーされます。

thing = 1 で戻り値は 2 となりました。

マーカーをつけるとこのようになります。

 

func()関数は 1 という実引数とともに呼び出され、この値は func() 内の thing という仮引数にコピーされ、呼び出し元に戻り値が返されます。

 

例:色の引数を渡して、その色の説明を返すプログラム

 



 

位置引数( 2つ以上の引数 )

 

2つ以上の引数を扱うとき、先頭から順々に仮引数にコピーされます

 

 

引数の順序を間違えてしまうと、結果は全く違うものとなってしまう。

 

キーワード引数

 

キーワード引数を使うと、関数定義と引数の順序が異なっていても問題ないです。

 

 

実引数を渡すところで、直接仮引数に対応させています。

 

デフォルト引数の指定

 

仮引数にデフォルトで値を指定することができます。

このデフォルト値は、仮引数に対応する実引数を渡さなかった時だけ有効です。

 

 

 

2つのプログラムを表しますが、2つ目のプログラムを正解とします。

1つ目:デフォルト値としてリストを指定しています。

 

2つ目:リストは関数の処理として定義しています。

 

デフォルト値は、関数が実行された時ではなく、関数が定義された時にだけ設定されるので、結果は異なります。

 

プログラムの説明

  • 1つ目は、デフォルト値でリストを指定しているため、ポイントで示した通りで要素数が増えていきます。
  • 2つ目は、関数の処理の中で空リストを作成しているため、関数が実行されるたびリストは初期化されます。

 

* 位置引数のタプル化

 

* を使うと、引数をタプルにまとめて仮引数に対応させることができます。

タプルについてはこちら

 

書式

 

実引数なしで呼び出すと、空タプルとして表示されます。

 

実引数ありで呼び出してみると、タプルとして表示されます。

 

位置引数と * 仮引数

 

位置引数とタプル仮引数を組み合わして使うことができます。

 

 

この場合、2つの仮引数に対応する実引数以外の残りは、全てタプル化される。

 

** キーワード引数の辞書化

 

** を使うと、キーワード引数を1個の辞書にまとめることができます。

辞書についてはこちら

 

書式

 

  • 引数の名前 = キー(key)
  • 引数の値    = 値(value)

 

 

 

関数のdocstring

 

関数定義にドキュメントつけることができる。⇒ 関数のdocstring

その関数がどのような処理を行うのかわかりやすくなるメリットがあります。

 

書式

 

 

 

このように実行結果には影響しません。

 

ドキュメントを表示したい場合は、help()関数 または __doc__ を使います。

 

関数をオブジェクトとして使う

 

Pythonの関数は柔軟性が非常に高いです。その理由として、

  • 変数に関数を代入できる
  • 他関数の引数として関数を使える
  • 関数からの戻り値として関数を返すことができる

が挙げられます。

この3つの操作は他言語だと 難しい、もしくわ不可能 なことなのです。

 

変数に関数を代入

 

test()関数 は、単に 12 と表示する関数です。

 

test()関数を、他の変数に代入してみましょう。

 

test()関数が代入されたので、変数a は関数のように使えます

 

他関数の引数として関数を使う

 

func()関数 は、単に “python” と表示する関数です。

 

  • func() ⇒ 関数
  • func ⇒ 関数オブジェクト

 

次に next()関数 を定義して、func を実引数として渡します。

 

next() 関数に、func という関数オブジェクトを渡すと、func() 関数が実行されるプログラムです。 ( a ⇒ func ) 

 

Pythonでは、( ) は関数呼び出しを示していて、( ) がなければ単に関数オブジェクトとして扱われます。 

 

次に2つの値を足した結果を表示する plus() 関数を定義します。

 

では、plus2()関数を定義して、plus と2つの値 を実引数として渡します。

 

plus2() 関数に、plus という関数オブジェクトを渡すと、plus() 関数が実行されるプログラムです。 ( func ⇒ plus ) 

 

戻り値として関数を返す

 

keisan()関数は、タプルの要素の合計値をだす関数です。

 

次に、func()関数を定義して、keisan と要素となる値 を実引数として渡します。

 

func() 関数に、keisan という関数オブジェクトを渡すと、keisan() 関数が実行されるプログラムです。 ( a ⇒ keisan )

 

フォローする

スポンサーリンク


Python

Posted by pythonista