![](/img/trans.png)
[英]In Python regex, how do I make the maximum number of line breaks to be 2?
[英]How do I only allow a list a maximum number of items in Python
我想為列表應用最大數量的項目,確保代碼不允許附加到列表的函數添加超過 3 個項目。
附加到列表的函數:
transactions = []
def append_hash():
transactions.append(hash)
我如何不允許append_hash
向列表中添加三個以上的哈希值: transactions
而不刪除任何先前的哈希值?
根據定義, list
具有任意大小。 您將需要一種新類型。
class BoundedListFullError(RuntimeError):
pass
class BoundedList:
def __init__(self, max_size, x=None):
if x is None:
x = []
self.values = []
self.values.extend(x)
self.max_size = max_size
def append(self, x):
if len(self.values) == self.max_size:
raise BoundedListFullError(self.max_size)
self.values.append(x)
def extend(self, xs):
if len(self.values) + len(xs) > self.max_size:
raise BoundedListFullError(self.max_size)
self.values.extend(xs)
您可以將list
子類化並修改append
方法:
class MyStack(list):
def __init__(self, max_size, *args, **kwargs):
super().__init__(*args, **kwargs)
self.max_size = max_size
def append(self, value):
if len(self) >= self.max_size:
raise ValueError("NO!")
# Per @chepner's suggestion
super().append(value)
somestack = MyStack(3)
somestack.append(1)
somestack.append(2)
somestack.append(3)
somestack.append(4) # Raises ValueError
如果你控制你的代碼並確保你只使用你的函數:
transactions = []
def append_hash(h):
transaction = (transactions + [h])[:3]
或者
def append_hash(h):
if len(transaction) < 3:
transaction.append(3)
# else:
# raise some error you need to choose/define
但是,這些都不會強制執行- 您仍然可以在沒有您的功能的情況下修改列表。 你需要一個單獨的班級 - 請參閱chepners 答案。
添加第四個散列將無聲地失敗 - 如果您想引發異常,則可以調整第二個解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.