假设我要执行代码,例如
value += 5
在我自己的命名空间内(所以结果本质上是mydict['value'] += 5
)。有一个函数exec()
,但我必须在那里传递一个字符串:
exec('value += 5', mydict)
并将语句作为字符串传递似乎很奇怪(例如,它不是那样着色的)。可以这样做:
def block():
value += 5
???(block, mydict)
? 最后一行的明显候选者是exec(block.__code__, mydict)
,但没有运气:它提高UnboundLocalError
了value
. 我相信它基本上是执行的block()
,而不是块内的代码,所以分配并不容易——对吗?
当然,另一种可能的解决方案是拆卸block.__code__
...
仅供参考,因为这个线程,我得到了这个问题。此外,这就是为什么一些(我不确定)需要新语法的原因
using mydict:
value += 5
请注意这不会引发错误但也不会改变mydict
:
def block(value = 0):
value += 5
block(**mydict)