Re: Python の lambda の中で手続き的な書き方をする

http://d.hatena.ne.jp/amachang/20080304/1204633733

(lambda: (
  式,
  式
,)[-1])

ほほー、なるほどね。式が1個の場合もあるので最後にカンマが必要なんだね。でも、各式の最後にカンマをつける方がきれいなんじゃない?

(lambda: (
  式,
  式,
)[-1])
        • -

勝手に添削した。

class Scope(object):
    def __init__(self, parent = None):
        self.parent = parent
        self.hash = {}

    def var(self, key, value = None):
        self.hash[key] = value
        return value

    def set(self, key, value):
        if key in self.hash or not(self.parent):
            self.hash[key] = value
        else:
            self.parent.set(key, value)
        return value

    def get(self, key):
        if key in self.hash or not(self.parent):
            return self.hash[key]
        else:
            return self.parent.get(key)
        
    def __setattribute__(self, key, value):
        return self.set(key, value)

    def __getattr__(self, key):
        return self.get(key)

スクリプト(コメントは僕)

class Scope:
    # (object)が付いていないのは「古いクラス」。非推奨
    hash = {}
    # これクラス変数になるよ、__init__の中で書くべき
    parent = None
    # これは__init__の中でself.parent作るからshadowされる。無意味
    def __init__(self, parent = None):
        self.parent = parent
    def var(self, key, value = None):
        self.hash.__setitem__(key, value)
        # self.hash[key] = valueでいいじゃん
        return value
    def set(self, key, value): 
        self.hash.__setitem__(key, value) if (key in self.hash or not(self.parent)) else self.parent.set(key, value)
        # 行長いのやだなぁ
        return value
    def get(self, key):
        return self.hash.__getitem__(key) if (key in self.hash or not(self.parent)) else self.parent.get(key)
        # hash.__getitem__(key)はhash[key]でいいな
    def __setattr__(self, key, value): return self.set(key, value)
    # __setattribute__にしないと無限ループになるね
    def __getattr__(self, key): return self.get(key)

ってかんじか。