我有一个包含变量名称的列表:
x = np.concatenate((var1, var2, var3), axis = 1)
如何在函数中使用字符串变量名作为变量?
示例:
使用列表中的变量:
application.idleTimerDisabled = true
答案 0 :(得分:0)
您可以使用**kwargs
:
def some_function(**kwargs):
var1 = kwargs.get('var1')
var2 = kwargs.get('var2')
var3 = kwargs.get('var3')
s = ['var1', 'var2', 'var3']
vals = ["someval1", "someval2", "someval3"]
some_function(**{a:b for a, b in zip(s, vals)})
现在,在函数some_function
,var1
,var2
和var3
存储"someval1"
,"someval2"
,"someval3"
答案 1 :(得分:0)
要实现此目的,您需要使用*
或**
运算符
my_func(*[a, b])
# equals to
my_func(a, b)
同样适用于dicts
my_func(**{'p1': a, 'p2': b})
# equals to
my_func(p1=a, p2=b)
您需要的第二件事是通过它的名称来获取变量。 Python有可能这样做,但它取决于变量的存储位置。
如果它是对象属性:
my_obj.var
# can be
getattr(my_obj, 'var')
对于局部变量:
my_var
locals()['my_var']
locals
为您提供dict
的所有局部变量。还有一个类似的globals
函数。
到目前为止,上面的例子都没用,但是想法是你使用python对象(list,dict或str)而不是写下变量名本身。
所以你可以将它们组合起来构建一个元组
def my_func():
var1, var2, var3, var4 = range(10, 14)
vars = ['var1', 'var2', 'var3']
loc = locals() # var1 - var4 and vars are available as dict now
tpl = tuple(loc[k] for k in vars)
print(tpl)
print(tuple([var1, var2, var3]))
因此,您可以替换
x = np.concatenate((var1, var2, var3), axis = 1)
# to
x = np.concatenate(tpl, axis=1)
注意强>
此代码将脆弱 - 将其移动到另一个func可能会破坏它。我认为这种代码风格不容易阅读。因此,在大多数情况下,我建议您搜索其他方法。如第一条评论中所建议的那样组合某些结构(字典或对象)中的所有变量可能会好得多。但我不能说它会起作用,因为我看不到你的整个代码。