在Python中,通过名称作为字符串访问变量
我想使用列表参数运行函数:在Python中,通过名称作为字符串访问变量,python,Python,我想使用列表参数运行函数: param = ['a', 'b', 'c'] myFunction(param) 但是a、b和c必须是动态的,所以我想删除引号以获得以下结果: param = [a, b, c] myFunction(param) 我该怎么做 PS:我尝试了这个问题的解决方案,但没有成功如果我理解正确,您希望实际使用参数a、b和c调用myFunction,前提是这些参数实际上是在前面定义的 一种方法是: a, b, c = 1, 2, 3 param = ['a', 'b',
param = ['a', 'b', 'c']
myFunction(param)
但是a、b和c必须是动态的,所以我想删除引号以获得以下结果:
param = [a, b, c]
myFunction(param)
我该怎么做
PS:我尝试了这个问题的解决方案,但没有成功如果我理解正确,您希望实际使用参数a、b和c调用myFunction,前提是这些参数实际上是在前面定义的 一种方法是:
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
编辑:
正如人们所建议的,一种安全的方法是通过全局或局部使用稍微不同的构造。否则,您可以使用eval,它功能更强大,但也可能不太安全。的str不能转换为变量名,但是如果您确实有th变量,并且您的目标是将每个变量传递给函数,这是可能的
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
你是说a、b和c是代码中定义的变量,param应该是包含这3个变量的列表吗?是的,就是这样,请重新表述你的问题,以避免误导未来的读者。你需要的是使用变量的名称来计算变量,而不是删除引号。那么为什么不直接写a、b、c呢?你的答案是,当全局变量足够时,请不要使用eval。初学者会不假思索地复制你的评估,并开放自己进行代码注入@CharlesR这仍然是非常糟糕的做法,看看复制品,使用当地人。这正是它的意思for@Aran-也许你是对的,我只是打得比我应该打得快@OlivierMelançon局部变量在列表理解中不起作用。字符串不能转换为变量是错误的。您可以使用locals['a']。虽然,我同意OP不应该依赖于strings@OlivierMelançon注意到,我所做的每一次查找都涉及到将str转换为变量名的繁琐过程,ty