Python の関数の使い方

Python の関数の使い方をご紹介します。

定義

関数はキーワード def を使って定義します。

def printhello(string):
    print 'hello, %s' % string

def 関数の名前(引数): という一行を書いて、関数の中身はインデントを下げて書いていきます。 def 行の末尾の : (コロン)は必須です。

使い方

printhello('world')  # 'hello, world'

定義文の後に引数を与えて使います。定義文よりも前に使うことはできません。

他のファイルの中で定義された関数は、 import 文で読み込んでから使います。たとえば、 myhelper.py というファイルの中で定義された myfunc1 という関数を使いたい場合は

from myhelper import myfunc1

myfunc1(x)

と書いて使います。構文は from ファイル名 import 関数名 です。

他のコードの中で定義された関数をまとめて import したい場合は

from ファイル名 import *

とすることで一括で import することもできます。ただ、このように何を import するのかを明示しない場合には名前が衝突してしまう可能性もあるので注意が必要です。

ファイル全体を import する場合には、 from は使わず、 import の対象に直接ファイル名を指定する次のような使い方も可能です。

import myhelper

myhelper.myfunc1(x)

引数

引数はさまざまな形で与えることができます。

def sumtotal(x, y, z):
    return x + y + z

と関数 sumtotal を定義すると

sumtotal(1, 2, 3)  # 6が返される
sumtotal(x=1, y=2, z=3)  # 同じく6が返される
sumtotal(1, 2, z=3)  # 同じく6が返される

という風に、さまざまなスタイルで呼び出すことができます。単純に変数を与えるだけで使うこともできますし、引数の名前(「キーワード」)を指定して使うこともできます。

ただし、引数の名前を指定したあとに名前を指定せずに引数を入れることはできません。どういうことかというと

sumtotal(x=1, y=2, 3)  # エラー

とすると、 x y をキーワードで指定した後に z については指定していないので、この場合はエラーとなります。

ちなみに、最初の関数 printhello のように return 文を書かなかった場合の戻り値は None となります。

print printhello('world')
# hello, world
# None
# と出力される

オブジェクトとしての関数

Python の関数の特徴のひとつは、「関数自体がオブジェクト」という点です。関数そのものを変数のように扱うことができます。

たとえば、 sin cos tan という 3 つの関数を定義した後で

trgs = [sin, cos, tan]
trgs[0](1)  #  sin(1)の値が返される
trgs[1](1)  #  cos(1)の値が返される
trgs[2](1)  #  tan(1)の値が返される

といった使い方ができます。

この特徴を使うと、たとえば flag という変数があって、その値が

  • 0 なら sin(x)
  • 1 なら cos(x)
  • 2 なら tan(x)

返したいような場合に、 if 文を使わなくても、上のように trgs というリストを定義して

trgs = [sin, cos, tan]
trgs[flag](x)

とシンプルに書くことができます。