2013/01/21

Pythonの関数の使い方

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

定義

関数はdefで定義します。
def printhello(string):
    print 'hello, %s' % string

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

使い方

printhello('world')  # 'hello, world'
定義文の後に引数を与えて使います。定義文よりも前に使うことはできません。

他のファイルの中で定義された関数は、import文で読み込んでから使います。たとえば、「myhelper.py」というPythonコードの中で定義された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)
というように、シンプルな書き方をすることができます。

0 件のコメント: