gpt4 book ai didi

Python:惰性字符串解码

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:01 25 4
gpt4 key购买 nike

我正在编写一个解析器,有很多文本需要解码,但我的大多数用户只关心所有数据中的几个字段。所以我只想在用户实际使用某些数据时进行解码。这是一个好的方法吗?

class LazyString(str):
def __init__(self, v) :
self.value = v
def __str__(self) :
r = ""
s = self.value
for i in xrange(0, len(s), 2) :
r += chr(int(s[i:i+2], 16))
return r

def p_buffer(p):
"""buffer : HASH chars"""
p[0] = LazyString(p[2])

这是我需要覆盖的唯一方法吗?

最佳答案

我不确定实现字符串子类在这里有多大好处。在我看来,如果您正在处理一个包含 PB 级数据的流,那么每当您创建了一个您不需要的对象时,您就已经输掉了游戏。您的首要任务应该是尽可能多地忽略输入。

您当然可以构建一个类似字符串的类来执行此操作:

class mystr(str):
def __init__(self, value):
self.value = value
self._decoded = None
@property
def decoded(self):
if self._decoded == None:
self._decoded = self.value.decode("hex")
return self._decoded
def __repr__(self):
return self.decoded
def __len__(self):
return len(self.decoded)
def __getitem__(self, i):
return self.decoded.__getitem__(i)
def __getslice__(self, i, j):
return self.decoded.__getslice__(i, j)

等等。这样做的一个奇怪之处在于,如果您将 str 子类化,则您未明确实现的每个方法都将根据传递给构造函数的值进行调用:

>>> s = mystr('a0a1a2')
>>> s
 ¡¢
>>> len(s)
3
>>> s.capitalize()
'A0a1a2'

关于Python:惰性字符串解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1656048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com