0

在一个名为“数据”的文件中,我有一些元组:

tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)

在另一个文件中,我导入数据文件并有一个连接字符串的函数,以便能够调用这些元组。

import data

def string(tupleNumber):

    return 'tuple' + str(tupleNumber)

如果我尝试打印元组,我会收到一个错误,因为 string(1) 未在数据中定义。

print data.tuple1     # This works
print string(1)       # This also works
print data.string(1)  # This does not

出现以下结果:

(1, 2, 3)
tuple1

Traceback (most recent call last):
  File "C:/Python27/Scripts/tuplecall.py", line 10, in <module>
    print data.string(1)
AttributeError: 'module' object has no attribute 'string'

我可以看到为什么它不起作用,但是当我尝试调用数据集时,我想不出如何将 string(1) 更改为看起来像 tuple1。

到目前为止,我解决这个问题的方法是使用以下代码:

from data import *

def string(tupleNumber):

    return 'tuple' + str(tupleNumber)

print tuple1
print string(1)
print eval(string(1))

这给出了结果:

(1, 2, 3)
tuple1
(1, 2, 3)

然而,由于我的“数据”文件中有很多数据,我担心我在每个元组中浪费内存加载“来自数据导入*”,当我需要它时,我可以像第一种情况一样调用它,但我是显然遗漏了一些重要的东西。

我也看到 eval() 不是最好用的东西,但到目前为止,我发现它是所有的。因此,如果有人能够就如何提高我的理解给我一些想法,我将不胜感激。

亲切的问候

嗅觉。

4

2 回答 2

4

这并不是变量名的真正含义。中的数字 1 和 2tuple1要么tuple2表示某些东西(例如,1真正的意思是“1 人”和2“2 人”),要么不表示,它们只是占位符。

如果它们确实意味着什么,您可能应该使用字典:

>>> my_data = {1: (1,2,3), 2: (4,5,6)}
>>> my_data
{1: (1, 2, 3), 2: (4, 5, 6)}
>>> my_data[1]
(1, 2, 3)
>>> my_data[2]
(4, 5, 6)

如果他们没有,而你只有两个元组,那么你不妨使用一个列表:

>>> my_data = [(1,2,3), (4,5,6)]
>>> my_data[0]
(1, 2, 3)
>>> my_data[1]
(4, 5, 6)
>>> for tup in my_data:
...     print tup
... 
(1, 2, 3)
(4, 5, 6)

你绝对不需要使用 eval。

于 2012-04-26T19:26:10.740 回答
0

您的 string() 方法声明不在数据文件中,因此 data.string() 不起作用

于 2012-04-26T19:20:15.840 回答