Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,通过名称作为字符串访问变量_Python - Fatal编程技术网

在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