目的
Pythonでリストをだんだんappendで増やしていき
長さが一定以上になったら一気に読み出して使いたい場合に
リストのメソッドを限定し間違って消したりしないようにしたい。
想定されるミスの例
TEST = []
if __name__ == "__main__":
# 入力
TEST.append(["ff"])
# 誤って挿入してしまったコード
TEST.pop()
# 結果表示、自分で消してるので空になる
print(TEST)
コード自体が間違っているというより、そういう風に書いているため、
なんとも言えないですが、長いコードになるとこういうことがよくあります。
解決方法
解決方法というほどではないんですが、グローバル変数のリストを
オブジェクトで書き直してメソッドを限ってしまえば、
コードもスッキリしますし、単純なミスが防げる気がします。
class BufferedList:
"""Buffered list.
Buffered list is queue-like object.
Implementation for safe list operation to limit access method.
Method:
clear: clear list
set: set list
get: get list
append: append list
qsize: return len(list)
"""
def __init__(self):
"""Init."""
self.__data = []
def clear(self):
"""Clear list."""
self.__data = []
def set(self, newlist):
"""Set."""
if not isinstance(newlist, list):
raise ValueError("Buffer only set list.")
self.__data = newlist
return self.__data
def get(self):
"""Get."""
return self.__data
def qsize(self):
"""Return list length."""
return len(self.__data)
def append(self, item):
"""Append."""
self.__data.append(item)
return self.__data
12/4 appendメソッドの中に不要な例外処理がありました。お詫びして訂正します。
上のクラスを使用した例
TEST = BufferedList()
if __name__ == "__main__":
# 入力
TEST.append(["ff"])
# 誤って挿入してしまったコード、ここでエラーになる
TEST.pop()
# 結果表示
print(TEST)
速度の面は検証していませんから、もしかしたら問題があるかも知れないです。
pythonのコードを書いているときに思いついたちょっとした話でした。