a?=?re.compile(r'\[(.+?)\]')
scope?=?{}
def?replace(ddd):
code?=?ddd.group(1)
try:
return?str(eval(code,?scope))
except?SyntaxError:
exec(code,?scope)
return?code
print(a.sub(replace,?'[x=1],[y=2],[z=2],the?sum?of?[x],[z]?and?[y]?is?[x+y+z]'))
scope是在全局變量裏保存正則匹配出來的x,y,z變量,存到全局變量裏去;
這本書的案例在except SyntaxError:後面少了點代碼,只提供註釋,前面其實已經提到用exec賦值了,只是代碼裏沒有體現出來,我完善了下這個應該能看懂了,還有[],正則已經把[]替換掉了,換成x,y,z對應的值