通过名称在Python中作为字符串访问变量

时间:2018-10-04 12:36:56

标签: python

我想运行一个带有list参数的函数:

param = ['a', 'b', 'c']
myFunction(param)

但是a,b和c必须是动态的,因此我想删除引号以获取此信息:

param = [a, b, c]
myFunction(param)

我该怎么做?

PS:我尝试了此问题的解决方案,但Removing quotation marks from list items

无效

2 个答案:

答案 0 :(得分:3)

如果我理解正确,您实际上想使用参数myFunctionab调用c(假设这些实际上是在前面定义的)。

一种方法是:

a, b, c = 1, 2, 3
param = ['a', 'b', 'c']

def myFunction(x, y, z):
    return x + y + z

myFunction(*[globals()[s] for s in param])
# returns: 6

编辑:

正如人们所建议的那样,一种安全的方法是通过globals()(或locals()使用稍微不同的结构)。否则,您可以使用eval(),它功能更强大,但安全性也可能更低。

答案 1 :(得分:1)

'str'不能转换为变量名,但是,如果您确实有变量,并且您的目标是将每个变量传递给函数,则可以实现

def addition(x):
    return x + 1

a = 1 b = 2 c = 3

param = [a, b, c] 
print([addition(i) for i in param])
# [2, 3, 4]

整个列表也可以像这样通过

def addition(x):
    return sum(x)

a = 1
b = 2
c = 3

param = [a, b, c]
print(addition(param))
# 6