這裏是一個片段:調用當地人()函數中的嵌套在一個類的方法
class Foo(object):
def bar(self, x):
def baz(y):
print locals()['self']
..
return baz(..)
foo = Foo()
foo.bar(..)
我有2個框。在運行Python 2.5的Windows Vista上調用foo.bar(..)
。在Ubuntu上,使用Python 2.7調用foo.bar(..)
會拋出KeyError
,但無法在locals()字典中找到self
。
任何想法?
編輯:我欠一個道歉;看起來我在試圖解決問題時誤導了你。在嵌套函數的實際代碼評估從DSL來的字符串:
r = re.compile(r'\$(\w+)')
eval_string = r.sub(r'self.player.stats["\1"]', s)
result = eval(eval_string)
它運行VISTA/Python 2.5的,無法在Ubuntu/Python 2.7版。
這只是出於好奇,還是解決實際問題的一部分?如果它是真正的問題的一部分,我們可能會採取更好的方法來實現它,因爲你很少需要使用locals()。 –
這段代碼不正確。調用foo.bar()實際上什麼都不做,因爲沒有任何返回,並且你沒有調用baz – joaquin
@Jeremy:代碼僅用於演示目的。 – shanyu