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)
ってかんじか。