ページへ戻る

− Links

 印刷 

Python​/関数定義 :: NJF Wiki

xpwiki:Python/関数定義

ページ内コンテンツ
  • 定義
  • 引数
    • 通常の引数
    • 引数の指定
    • 引数のデフォルト値
    • 可変引数
  • その他
    • 関数を変数に入れる
    • 再帰関数
    • ドキュメントストリング

定義 anchor.png[1] Edit [2]

Pythonで関数を定義するには「def」を使います。

def testFunc():
    print "test"

testFunc()

結果

test
Page Top

引数 anchor.png[3] Edit [4]

Page Top

通常の引数 anchor.png[5] Edit [6]

関数定義の時に引数も定義できます。

def testFunc(a,b,c):
    print "a:%s,b:%s,c:%s" % (a,b,c)

testFunc("a","b","c")

結果

a:a,b:b,c:c
Page Top

引数の指定 anchor.png[7] Edit [8]

関数を呼び出すときに、どの引数に値を入れるかを指定できます。このとき、値を指定した場合は、引数の順番は無視されます。

testFunc(b="b",a="a",c="c")

結果

a:a,b:b,c:c

引数の値を指定したものとそうでないものが混在する場合には、必ず指定しない物を先に書かなければなりません。

testFunc("a",c="c",b="b")

結果

a:a,b:b,c:c

順番を守らないとエラーとなります。

testFunc(c="c",b="b","a")

結果

SyntaxError: non-keyword arg after keyword arg
Page Top

引数のデフォルト値 anchor.png[9] Edit [10]

引数にデフォルト値を設定することも可能です。 その場合、引数を省略すると定義時のデフォルト値が使われます。

def testFunc(a, b = "b", c = "c"):
    print "a:%s,b:%s,c:%s" % (a,b,c)

testFunc("a","b")

結果

a:a,b:b,c:c

関数を定義するときには、デフォルト値のないもの、デフォルト値のあるものの順に定義しないとエラーとなります。

def testFunc(a = "b", b, c = "c"):
    print "a:%s,b:%s,c:%s" % (a,b,c)

結果

SyntaxError: non-default argument follows default argument
Page Top

可変引数 anchor.png[11] Edit [12]

可変引数にも対応しています。引数をリストで受け取りたい場合は、「*」を使います。

def testFunc(*i_list):
    for i in i_list:
        print i

testFunc(1,2)

結果

1
2

このとき、引数をリストで指定することも可能です。その時には呼び出し時の引数にも「*」を付けます。

testFunc(*[1,2,3])

結果

1
2
3

「**」を使うと辞書オブジェクトで引数を受け取ることも可能です。

def testFunc(**i_dic):
    for k,v in i_dic.iteritems():
        print k,v

testFunc(A='a',B='b')

結果

A a
B b

リストと同様に、関数呼び出し時の引数に「**」を付けることで、辞書オブジェクトを引数とすることもできます。

testFunc(**{'A':'a','B':'b'})

結果

A a
B b
Page Top

その他 anchor.png[13] Edit [14]

Page Top

関数を変数に入れる anchor.png[15] Edit [16]

関数は変数に入れることもできます。

def testFunc(a, b, c):
    print "a:%s,b:%s,c:%s" % (a,b,c)

f = testFunc

f("a","b","c")

結果

a:a,b:b,c:c

ただし、定義と同時に変数や関数の引数には入れられないため、その場合はラムダ式を使います。ラムダ式については「Python​/ラムダ式[17]」を参照のこと。

Page Top

再帰関数 anchor.png[18] Edit [19]

再帰関数も使えます。

def printN(n):
    if n > 0:
        print n
        printN(n-1)

printN(3)

結果

3
2
1
Page Top

ドキュメントストリング anchor.png[20] Edit [21]

関数やクラス定義のすぐ下に書かれた引用符で囲まれた部分はドキュメントストリングと呼ばれ、「__doc__」で参照することができます。

def testFunc(a, b, c):
    """print a,b,c"""
    print "a:%s,b:%s,c:%s" % (a,b,c)


print testFunc.__doc__

結果

print a,b,c

「"」「'」「"""」「'''」どれでも書けますが、複数行に渡るときもあるので、三重引用符を使うのが普通です。

このドキュメントストリングは対話モードで「help()」でも参照可能です。IDEなどでも表示してくれることもあります。なるべく関数の機能がわかるようなコメントを書いておきましょう。


Last-modified: 2017-05-24 (水) 17:59:32 (JST) (2522d) by njf