関数

【 目次 】

関数の定義

簡単な関数の定義の例を以下に示す。

def add_func(arg1,arg2):
    return arg1+arg2;

関数add_funcは2つの引数の和を返す。

関数呼び出し

前述関数の呼び出しは引数をカッコで囲って、

result = add_func(2, 3)
print result,type(result)

実行結果

5

値を返さない関数の戻り値は?

pass文を使って関数の本体を記述しない空の関数を記述できる。

def empty_func():
    pass

関数の戻り値はreturn文の引数で指定するが、 returnの引数となる式がない場合やreturn文が実行されない場合はNoneが返る。

print empty_func()

実行結果

None

シーケンス型による関数の入出力

他言語プログラマーからみると、便利でちょっと不思議なpythonの関数の入出力について。

シーケンス型(リストやタプルそして文字列) のpythonのふるまいを利用すると面白いことができる。

複数の戻り値を返す

関数の戻り値にシーケンス型の値を指定しすることで、複数の戻り値を返してやる事ができる。

タプルの例から

def func():
    return (123,"abc",("x","y","z"))

x1,x2,x3 = func()
print x1,x2,x3

2行目のreturnの後のカッコは省略可能

    return 123,"abc",("x","y","z")

実行結果

123 abc ('x', 'y', 'z')

文字列の場合の例も

def func():
    return "abc"

x,y,z=func()
print x,y,z

実行結果

a b c

リストを使って複数の引数を一度に渡す。

引数の前に*を付けてシーケンス型の値を指定すると、複数の引数の値を一度に渡してやることができる。

以下のような3つの引数を持つ関数が定義されているとして

def func(arg1,arg2, arg3):
    print "arg1=",arg1
    print "arg2=",arg2
    print "arg3=",arg3

まずはタプルの例から

tpl=("a","b","c")
func(*tpl)

もしくは直にタプルを指定して

func(*("a","b","c"))

文字列もシーケンス型なので

func(*"abc")

実行結果

arg1= a
arg2= b
arg3= c

関数内の変数のスコープとグローバル変数の扱い

関数内で定義されている変数はローカル変数、モジュルトップレベルで定義されている変数はグローバル変数

関数内のグローバル変数は読み出し可能であるが、「global 文」で宣言しない限り代入できない。 注意すべき点は、「global 文」で宣言せずに代入した場合には、その変数はグローバル変数と同名のローカル変数とみなされてしまうという事。

以下にその例を示す。

#coding: UTF-8

var1=u"モジュールトップレベル変数1"
var2=u"モジュールトップレベル変数2"

def func():
    var1="xxx"

    global var2
    var2="yyy"

    print u"関数内", var1, var2

func()
print u"関数実行後", var1, var2

実行結果

関数内 xxx yyy
関数実行後 モジュールトップレベル変数1 yyy

globals,locals 関数を使うとグローバル変数とローカル変数のリストをディクショナリとして受け取ることができる。

と、サラリと変数のスコープについて要点だけを述べたが実際にはもう少し複雑。

標準で用意されている関数

pythonの組み込み関数や標準ライブラリには便利な関数が豊富にが用意されている

関数のドキュメンテーション文字列

ページのトップへ戻る