1
cardPayments={}
rowNumber, NumOfCardPayments = 0, len(cardPayments)

for x in range(5):
    cardPayments.update({x:x})
    print(cardPayments)
    print('cardPayments: '+str(NumOfCardPayments)+'\n')

输出:

{0: 0}
cardPayments: 0

{0: 0, 1: 1}
cardPayments: 0

{0: 0, 1: 1, 2: 2}
cardPayments: 0

{0: 0, 1: 1, 2: 2, 3: 3}
cardPayments: 0

{0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
cardPayments: 0

我希望通过在 dict 的大小增加时引用NumOfCardPaymentslen(cardPayments),在 for 循环期间cardPayments的 int 值也会增加,NumOfCardPayments但情况似乎并非如此。

我怎样才能创建NumOfCardPayments一个变量,作为一个参考来维护len(cardPayments)

(请注意,我不想简单地NumOfCardPayments+=1在 for 循环中做)

4

3 回答 3

4

想到的最接近的事情是一个属性,它在读取时自动评估一个函数:

>>> class LenDict(dict):
...   @property
...   def len(self):
...     return len(self)
...
>>> d=LenDict()
>>> d.len
0
>>> d[1]=2
>>> d.len
1
>>>

但是恕我直言,这并不比len(d)直接使用更清楚,当然也没有那么有效。也可以通过包装 setitem 将钩子以相反的方式放置。

于 2014-04-03T15:01:38.957 回答
2

我不认为这是可能的。在 Python 中,变量包含指向对象的指针。整数对象是不可变的。因此,更改 numOfCardPayments 值的唯一方法是将其绑定到一个新对象...

于 2014-04-03T14:42:05.657 回答
1

您可以制作一个简单的 lambda 对象来返回特定对象的长度

def len_follower(target_object):
    return lambda : len(target_object)

然后将参数设置target_objectcardPayments

>>>cardPayments = {}
>>>NumOfCardPayments = len_follower(cardPayments)
>>>NumOfCardPayments()
0
>>>cardPayments[1] = 0
>>>NumOfCardPayments()
1
于 2014-04-03T15:35:24.323 回答