我有一个列表,其中包含一些值,例如
tableVal = ['val1', 'val2', 'val3']
我想将每个元素用作变量,并相应地指定为函数的参数,例如:
for i in tableVal:
i = myFunc(print "this is your value: "+ i)
因此,当我输入>> val1
时,它应该返回this is your value: val1
。我怎么能这样做?
答案 0 :(得分:1)
正如评论中暗示的那样,动态地将名称映射到值的正确方法是使用字典:
d = dict((i, 'this is your value: {}'.format(i)) for i in tableVal)
print d['val1']
输出:
this is your value: val1
您可以将此映射添加到globals()
,以便您的名称成为全局变量:
globals().update(d)
print val1
输出:
this is your value: val1
但这几乎总是一个坏主意。其他人不会期望变量被神奇地创建,并且它们可能会影响预先存在的变量。您可以通过将它们放在自己的命名空间中来降低风险:
class Namespace(object):
def __init__(self, d):
vars(self).update(d)
n = Namespace(d)
print n.val1
这允许您在IDE或IPython shell中使用自动完成,而不会污染您的全局命名空间。
使用标准库的更好的选择,如果不变性可以,collections.namedtuple
:
n = namedtuple('Namespace', tableVal)(*d.values())
print n.val1
答案 1 :(得分:0)
您可以将lambda函数与字典一起使用:
tableVal = ['val1', 'val2', 'val3']
new_table = {i:(lambda x: lambda :"this is your value: {}".format(x))(i) for i in tableVal}
new_table['val2']()
输出:
this is your value: val2