0

「データ」と呼ばれる 1 つのファイルには、いくつかのタプルがあります。

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)

ただし、「データ」ファイルには多くのデータが含まれているため、必要なときに最初のケースのように呼び出すことができるのに、「from data import *」を使用して各タプルでメモリの読み込みを無駄にしているのではないかと心配していましたが、明らかに重要な何かが欠けています。

また、 eval() を使用するのが最善ではないことも確認しましたが、これまでのところ、機能することがわかっているのはそれだけです。ですから、私の理解を改善する方法について誰かが私にいくつかのアイデアを与えることができれば、私は非常に感謝しています.

敬具

スニッフィー。

4

2 に答える 2

4

それは実際には変数名が意味するものではありません。と の数字 1 と 2 はtuple1tuple2何かを意味するか (たとえば、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)

そうでなく、タプルが 2 つしかない場合は、リストを使用することもできます。

>>> 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 に答える