变量who的引用总是len(dict)

2024-04-16 10:13:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我希望通过引用NumOfCardPaymentslen(cardPayments),随着cardPaymentsdict大小的增加,for循环中NumOfCardPayments的int值也会增加,但情况似乎并非如此。你知道吗

如何将NumOfCardPayments创建为变量,并作为len(cardPayments)的引用进行维护?你知道吗

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


Tags: inforlen情况updaterangeintprint
3条回答

可以创建一个简单的lambda对象来返回特定对象的长度

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

然后将参数target_object设置为cardPayments

>>>cardPayments = {}
>>>NumOfCardPayments = len_follower(cardPayments)
>>>NumOfCardPayments()
0
>>>cardPayments[1] = 0
>>>NumOfCardPayments()
1

最容易想到的是一个属性,它在读取时自动计算函数:

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

但是我认为这并不比直接使用len(d)更清楚,当然也没有那么有效。也可以通过包装setitem将钩子放在另一个方向。你知道吗

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

相关问题 更多 >