関数に関数を渡す

リストのsortメソッドには、比較用の関数を渡すことができる。
まずは何も渡さない場合:

a = ["abc", "def", "BCD", "EFG"]

a.sort()
print a
^o^ > python sort.py
['BCD', 'EFG', 'abc', 'def']

比較用の関数を渡さないと、ASCII順にソートされている。次は小文字に変換してから比較する関数を渡してみる。

a = ["abc", "def", "BCD", "EFG"]

def cmp_lower(a, b):
    return cmp(a.lower(), b.lower())

a.sort(cmp_lower)
print a

実行結果:

^o^ > python sort2.py
['abc', 'BCD', 'def', 'EFG']

大文字小文字を無視した順になった。

こんな風に関数に関数を渡すことができる。Pythonでは関数は第一級のオブジェクトだったことだな。

じゃあ、関数を返すことはできるのか。

def foo():
    print "foo"
    def bar():
       print "bar"
    return bar

bar = foo()
bar()

foo関数のなかでbar関数を定義して、それをreturnしている。実行すると:

^o^ > python return_function.py
foo
bar

予想通りの結果になった。最初の出力 foo はfoo関数の実行中に出力されたもの。次の bar はfoo関数から返ってきた関数を呼び出したときに出力されたものだ。

Pythonでは関数に関数を渡すことも、関数を返すこともできる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください