我想写一个函数,它带有L
,一个元组列表(一个例子可能是L = [(1,0,0), (1,1,0)]
),并循环遍历L
来创建一个新变量{{1} } t{0}.format(i)
中的i
条目。理想情况下,在for循环结束时L
。然后我将把元组变成列表,但我用Google搜索,发现我可以做t1 = (1,0,0), t2 = (1,1,0)
。我怎么能完成第一部分呢?
答案 0 :(得分:3)
好吧,你可以制作这样的全局变量:
L = [(1,0,0), (1,1,0)]
def make_vars(L):
for i, item in enumerate(L, start=1):
globals()['t{0}'.format(i)] = item
make_vars(L)
print(t1)
# (1, 0, 0)
但实际上,动态命名变量有什么用呢?它们很难编程,因为在运行之前你不知道它们的名字。 (您可能猜错(正确或错误)有t1
,但是有t10
吗?)
使用dict要好得多:
def make_vars2(L):
return dict(enumerate(L, start=1))
t = make_vars2(L)
print(t[1])
# (1, 0, 0)
dict
t
所有“变量”都捆绑在t
中,您确切知道t.keys()
,dict
中的“变量”是什么不污染你的全局命名空间。
然而,第二个想法,你真的需要一个L
吗? L
本身不够吗?使用L[i]
访问t[i+1]
中的项目比使用In [3]: %timeit t[1]
10000000 loops, best of 3: 66.1 ns per loop
In [4]: %timeit L[0]
10000000 loops, best of 3: 42.8 ns per loop
访问相同项目更快:
{{1}}