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)
とシンプルに書くことができます。