Pythonの技法:関数型言語スタイル「関数の部分適用」
文:Nick Gibson(Builder AU)
翻訳校正:原井彰弘
翻訳校正:原井彰弘
2008/01/09 06:00
Pythonではfunctoolsライブラリによって関数型言語のスタイルでプログラムを記述することも可能だ。ここでは「関数の部分適用」について説明しよう。
Pythonはその起源からすると関数型言語ではない。しかし、functoolsライブラリを利用することで、関数型言語のスタイルでプログラムを記述できるようになる。関数型のコードを記述するために重要なツールの一つとして、functoolsモジュールでも利用可能な「関数の部分適用」がある。
部分適用とは、ある関数への複数の入力のうち一つを定数値にバインドし、残りの入力のみを受け取る新しい関数を作成することである。バインドされた入力は、新しく作成された関数が呼び出される際にはいつも同じ値になる。以下に、functoolsモジュールを用いた部分関数の簡単な使用例を紹介しよう。なお、この例ではoperatorモジュールのadd関数も使用している。このadd関数は「+」演算子と同様の働きをするものの、関数であるためオブジェクトとしても扱うことが可能だ。
>>> from functools import * >>> from operator import * >>> add(1,2) 3 >>> add1 = partial(add, 1) >>> add1(2) 3 >>> add1(10) 11
partial関数はいわゆる高階関数であり、入力として関数を一つ受け取る(高階関数には、ほかにmap関数やfilter関数がある)。ただし、ほかの関数とは異なって、partial関数は戻り値としても関数を返す。このとき返されるのは、ほかの関数と同様にプログラム内で使用可能な関数だ。add1関数は、引数を一つ受け取るほかの関数とまったく同様に利用することが可能なのである。呼び出しはもちろん、以下のようにmap関数の引数として使用したり、もう一度部分適用することすら可能なのだ。
>>> map(add1, [1,2,3,4,5]) [2, 3, 4, 5, 6] >>> five = partial(add1, 4) >>> five() 5
partial関数はオブジェクトのメソッドに対して使用することも可能である。たとえば、以下の例ではデフォルトの文字列を持ったリストを生成するためにpartial関数を使用している。
>>> standard = "User N"
>>> usern = partial(standard.replace, "N")
>>> usern("1")
'User 1'
>>> usern("1202")
'User 1202'
次ページではより本格的な例をお見せしよう。
- 0人の推薦記事
- 0人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(0)
- 2日前のトップ記事
- 3日前
- 4日前
- 5日前
- 6日前
- ホワイトペーパー
- 話題のタグ
SOA
Apple
RIA
Microsoft
小技
Ajax
開発環境
Google
Solaris
Leopard
Adobe
Firefox 3
入門
PHP
iPhone
仮想化
Internet Explorer
Linux
フレームワーク
Opera
iPhone 3G
Ruby
Python
Firefox
Off Topic
イロハ
Java
CSS
HTML
iPod touch
Windows
Mozilla
Database
Mac OS X
C/C++
Apache
Webアプリケーション開発
Safari
server
ブラウザ
XHTML
ライブラリ
JavaScript
CSS 3
リファレンス
Tips
Flash
Eclipse
オープンソース
Webデザイン
話題のタグを見る »
動画再生耐久レース―フル充電からどれだけ耐えた?
心当たりありませんか--あなたの上司がイヤがる5つの話し方
フォームデザイン虎の巻:複数の選択肢を提供する
フォトレポート:技術サポートの悪夢
無料の「Oracle Database XE」で高速バッチ処理:実装のポイント
Firefoxで情報をカンタン・ベンリに整理する
iPhone Safari、Acidテストでは高得点でも…… Firefoxは載らないの?:WebサイトのiPhone 3G対応問題を考える(ソフト編)
WebサイトのiPhone 3G対応問題を考える(ハード編)
フォトレポート:時代を振り返る--「MS-DOS 4」のインストール
SOAと仮想化の関係は?--常に進化を続けるBEAのミドルウェア戦略
ウェブ開発の生産性はどうしたら上がる?--MODIPHI Appsで半日で作るマッシュアップサイト(1)
JailBreakついに:PwnageTool公開
プロジェクトの進行でよくある4つのトラブル
DELLが掲げる「新・仮想化アセスメントサービス」
ZDNet Japan ホスティング特集
ZDNet Japan Green IT
Techno Exchange