【问题标题】:Python: concatented string, allow this to call a tuplePython:连接字符串,允许它调用元组
【发布时间】:2012-05-07 13:33:58
【问题描述】:

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

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() 不是最好的使用方法,但到目前为止,我发现这一切都有效。因此,如果有人能够就如何提高我的理解给我一些想法,我将不胜感激。

亲切的问候

嗅觉。

【问题讨论】:

    标签: python string tuples python-2.7


    【解决方案1】:

    这并不是变量名的真正含义。 tuple1 和 tuple2 中的数字 1 和 2 要么表示某种含义(例如,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。

    【讨论】:

    • 您好,感谢您的回复,每个元组包含特定案例的数据,大约有 150 个案例包含 15 个元素。每个案例都包含永远不会改变的数据,所以我使用了元组,因为它是不可变的并且想要保护数据。我刚刚用字典进行了测试,它运行良好,如果您认为这是一种更好的方法,我将更改我的代码。在这种情况下,使用“导入数据”而不是“从数据导入 *”导入数据确实更好。如果您可以在不需要使用 eval() 方面进行更多扩展,这将极大地帮助我理解。非常感谢,SNIFFY
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 2012-12-12
      • 2011-01-31
      • 1970-01-01
      • 2016-07-14
      • 2021-11-25
      • 1970-01-01
      • 2013-03-20
      • 2012-10-16
      相关资源
      最近更新 更多