我擁有一個名爲Collatz
的類和一個函數collatz_it
,它創建該類的一個對象,我試圖使用collatz conjucture生成一個數字的步驟數達到1,直到百萬它們相應的步驟,使用一臺發電機從沒有str方法的類中檢索數據
import collatz
values = {}
count = 0
#collatz.collatz_it(n)
def gen():
n = 0
x = 0
while True:
yield x
n += 1
x = collatz.collatz_it(n)
for i in gen():
count += 1
values[count] = i
print values
if count == 1000000:
break
正如你所看到的,我產生的採取它步驟的量使用給定數量的考拉茲猜想達到100,並與相應的添加到字典編號但當我打印出字典值時,它的輸出很笨拙,像這樣:
{1: 0}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>, 4: <collatz.Collatz instance at 0x01DCDFA8>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>, 4: <collatz.Collatz instance at 0x01DCDFA8>, 5: <collatz.Collatz instance at 0x01DCDEB8>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>, 4: <collatz.Collatz instance at 0x01DCDFA8>, 5: <collatz.Collatz instance at 0x01DCDEB8>, 6: <collatz.Collatz instance at 0x01DCDE90>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>, 4: <collatz.Collatz instance at 0x01DCDFA8>, 5: <collatz.Collatz instance at 0x01DCDEB8>, 6: <collatz.Collatz instance at 0x01DCDE90>, 7: <collatz.Collatz instance at 0x01DE8940>}
如果我打印的print i
代替print values
我得到所需的輸出,這基本上是因爲print
聲明觸發類的__str__
方法
是不是有什麼辦法可以增加的實際步驟在不輸入<collatz.Collatz instance at 0x01DCDFA8>
字典中,是否有任何形式的檢索數據,從__str__
方法的方法,使我的字典裏看起來是這樣的:
{1: 0}
{1: 0, 2: 1}
{1: 0, 2: 1, 3: 7}
爲什麼不能使用'__str__'?或者'__repr__'呢? – 2rs2ts
任何Python容器的缺省表示是使用內容的'repr()'輸出,而不是'str()'。 –