我正在设置一些环境变量,例如env['c'] = 4.0
。
其中有一些,因此env
打印{'c': 4.0, 'b': 2.0}
。
我需要在Variable
课程中编写一个eval函数,将c
设为4.0
,将b
设为2.0
。就像,无论密钥是什么,它都应该设置为一个变量,其值在eval
。
class Variable:
def __init__(self, name):
self.name = name
def __str__(self):
return 'Var('+self.name+')'
__repr__ = __str__
def eval(self, env):
print 'ENV'
print env
for k, v in env:
vars()[k] = v
return self.name # to variable?
此外,我的k
/ v
循环似乎只对一个元素起作用。不知道为什么会这样。任何帮助都会很棒。感谢。
这是我的控制台输出:
ENV
{}
a
ENV
{'b': 2.0}
Traceback (most recent call last):
File "/Users/cdrum/cal.py", line 219, in <module>
print testEval()
File "/Users/cdrum/cal.py", line 205, in testEval
print Variable('b').eval(env)
File "/Users/cdrum/cal.py", line 86, in eval
for k, v in env:
ValueError: need more than 1 value to unpack
更新
env = {}
env['b'] = 2.0
print Variable('b').eval(env)
那应该返回2.0
。
答案 0 :(得分:2)
错误很简单(正如评论中已经注意到的那样)
行for k,v in env:
dict可以用作迭代器,但它只迭代键。那个错误消息:ValueError: need more than 1 value to unpack
意味着:你期望2个值(一个键及其值),只得到一个(键)。
您需要的是:
for k,v in env.iteritems():
...
答案 1 :(得分:0)
我想我刚回答了我自己的问题:
def eval(self, env):
return env.get(self.name)