変数束縛してみる

Pythonで変数束縛がしたい!!って思った.
具体的に言うと

>>> f = lambda x, y: x ** y
>>> g = f(x=2)
>>> g(3)
8

こんな感じのことがしたい!!
早速チャレンジ(`・ω・´)シャキーン

>>> f = lambda x: x ** y
>>> g = f(2)
>>> g(3)
8

うーん,これじゃ束縛可能な変数が1つだけだ.
しかも,f(2, 3)はできない

def f(x=None, y=None):
    if x is None and y is None:
        return lambda x, y: x ** y
    elif x is None:
        return lambda x: x ** y
    elif y is None:
        return lambda y: x ** y
    else:
        return x ** y
>>> f(2, 3)
8
>>> g = f(x=2)
>>> g(3)
8
>>> h = f(y=3)
>>> h(2)
8

できたヾ(゚ω゚)ノ゛
最後にもうちょっと整理

def f(x=None, y=None):
    def f_(x, y):
        return x ** y
    if x is None and y is None:
        return lambda x, y: f_(x, y)
    elif x is None:
        return lambda x: f_(x, y)
    elif y is None:
        return lambda y: f_(x, y)
    else:
        return f_(x, y)

これでおkヽ(´ー`)ノ