2012-01-12 9 views
3

私はPythonのpartial関数を実行しています。面白いと感じましたが、別の言語機能として学習するのではなく、実際の例を使って理解できると便利です。ここに私の質問に部分的な関数の実際の例

答えて

-1

ルック:Does python have a built-in function for interleaving generators/sequences?

from itertools import * 
from functional import * 

compose_mult = partial(reduce, compose) 
leaf = compose_mult((partial(imap, next), cycle, partial(imap, chain), lambda *args: args)) 

あなたは、私が(マップや軽減)機能をイテレータに渡すことができ、単一の引数関数を作成するために、部分的なアプリケーションを使用していることがわかります。

+9

を「モジュールのインポート*から」悪いスタイルで、例のスニペットでそれを周囲に広がりません。 – ddaa

+0

@ddaa:私は同意しない。汎用ユーティリティの「配管」をインポートする場合など、しばしば適切です。 – Marcin

+2

便利です(アプリケーションを書くためにtkinterからすべてのオブジェクトをインポートするような)場合がありますが、例のスニペットでは避けるのが最善です。 2つのライブラリからそれを行うのは、それぞれがどこから来ているのかわからないので、特に混乱します。ああ、「機能的」ではなく「functools」を意味しましたか? –

11

私はしばしばデフォルトのstdoutではなくstderrに印刷しています。

from __future__ import print_function 
import sys 
from functools import partial 

print_stderr = partial(print, file=sys.stderr) 
print_stderr('Help! Little Timmy is stuck down the well!') 

あなたはその後、使用できるprint機能で撮影した他の引数を持つ:

print_stderr('Egg', 'chips', 'beans', sep=' and ') 
6

、例えばTkinterのコードを書くときに、コールバック関数に識別子データを追加するために別の例がありますパラメータなしでTkinterコールバックが呼び出されるためです。

だから、私はテンキーを作成したいとして、押されたボタンを知っている:

import Tkinter 
from functools import partial 

window = Tkinter.Tk() 
contents = Tkinter.Variable(window) 
display = Tkinter.Entry(window, textvariable=contents) 

display.pack() 

def clicked(digit): 
    contents.set(contents.get() + str(digit)) 

counter = 0 

for i, number in enumerate("7894561230"): 
    if not i % 3: 
     frame = Tkinter.Frame(window) 
     frame.pack() 
    button = Tkinter.Button(frame, text=number, command=partial(clicked, number)) 
    button.pack(side="left", fill="x") 

Tkinter.mainloop() 
+1

+1他のGUIライブラリ(PyQt、wxなど)でも便利です。 – reclosedev

関連する問題