簡體   English   中英

引用誰的變量始終是len(dict)

[英]Variable who's reference is always to len(dict)

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

我希望通過將NumOfCardPayments引用到len(cardPayments) ,隨着cardPayments dict的大小增加,因此for循環期間NumOfCardPayments的int值似乎也不是這種情況。

如何創建NumOfCardPayments作為變量,該變量作為len(cardPayments)的引用進行維護?

(請注意,我不想在for循環中簡單地執行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值的唯一方法是將其綁定到新對象...

您可以制作一個簡單的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM