python3中使用locals的类类闭包

时间:2012-07-30 18:40:46

标签: python functional-programming scheme closures

我发现这篇文章看起来很有趣 http://okmij.org/ftp/Scheme/oop-in-fp.txt

所以我尝试用Python编写类似于类的闭包(只是一个玩具):

def clos(x,y):
    def getx():
        print(x)
    def gety():
        print(y)
    def setx(i):
        nonlocal x
        x = i
    def sety(i):
        nonlocal y
        y = i
    lc = locals()
    return lambda x,*y:lc[x](*y)

k=clos(1,2)
k("getx")
k("gety")
k("setx",2)
k("getx")

但是,我认为lc = locals()看起来很笨拙。但我不能在下面的句子中使用return lambda x,*y:locals()[x](*y),因为它会构建一个不同的环境。

有什么技巧可以让它看起来更简单吗?

1 个答案:

答案 0 :(得分:2)

怎么样

return (lambda lc: lambda x,*y:lc[x](*y))(locals())