Python - 动态地将变量名称指定为数组的元素

时间:2018-01-08 14:16:29

标签: python

我有一个列表,其中包含一些值,例如

tableVal = ['val1', 'val2', 'val3']

我想将每个元素用作变量,并相应地指定为函数的参数,例如:

for i in tableVal:
    i = myFunc(print "this is your value: "+ i)

因此,当我输入>> val1时,它应该返回this is your value: val1。我怎么能这样做?

2 个答案:

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