関数
【 目次 】
関数の定義
簡単な関数の定義の例を以下に示す。
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の組み込み関数や標準ライブラリには便利な関数が豊富にが用意されている