Python:从环境设置变量并按名称检索它们

时间:2016-01-04 10:38:04

标签: python

我正在设置一些环境变量,例如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

2 个答案:

答案 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)