Python的 - 使用变量名作为输入列表功能
问题描述:
我有一个变量名的列表:Python的 - 使用变量名作为输入列表功能
['var1', 'var2', 'var3']
我如何可以使用字符串变量名作为变量的函数吗?
例子:
使用变量列表为:
x = np.concatenate((var1, var2, var3), axis = 1)
答
您可以使用**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"
答
要做到这一点,你需要使用*
或**
操作
my_func(*[a, b])
# equals to
my_func(a, b)
而同样的作品与类型的字典
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可能会打破它。我认为这种代码风格并不容易阅读。所以在大多数情况下,我建议你去寻找另一种方法。按照第一条评论的建议,将某些结构(字典或对象)中的所有变量组合起来可能会好得多。但我不能说它会工作,因为我没有看到你的代码。
你不应该这样做。将变量放在字典中,而不是'd = {'var1':arr1,'var2':arr2,'var3':arr3}' – Psidom
你从哪里得到一个变量名列表? – chepner
我使用列表创建要素的子集(不同和独特的要素组合) – Raff