Python の関数の使い方をご紹介します。
定義
関数はキーワード def を使って定義します。
def printhello(string):
print 'hello, %s' % stringdef 関数の名前(引数): という一行を書いて、関数の中身はインデントを下げて書いていきます。 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)とシンプルに書くことができます。