-1

所以基本上,我试图通过 eval() 作弊来模拟。但它似乎在语法上不可行。好奇有没有其他方法?(我很清楚 python 的模拟库,尽管他们使用任何 1-5 行技术来解决这个问题,但请不要建议,这会很棒!)

>>> import os
>>> def func(*args, **kwargs):
...   print "Who knows?"
... 
>>> to_assign = 'os.getcwd'
>>> os.getcwd
<built-in function getcwd>
>>> eval('os.getcwd')
<built-in function getcwd>
>>> os.getcwd = func
>>> os.getcwd()
Who knows?
>>> eval('os.getcwd') = func
  File "<stdin>", line 1
SyntaxError: can't assign to function call

如上所示, os.getcwd 和 eval('os.getcwd') 应该评估相同的东西,但如果 eval 在语句的目标端,我无法进行分配。

另外,我不能使用 exec 因为我在带有闭包的嵌套函数中使用它。

Python 2 的解决方案是更可取的,但如果存在 Python 3 的解决方案也很高兴。

谢谢,陈兹

4

1 回答 1

0

你知道setattr吗?

setattr(os, "getcwd", func)

的结果eval是一个(就像任何其他函数的返回值一样),在 Python 中赋值给一个值是没有意义的。

于 2013-09-19T10:32:09.850 回答